Skip to content

Commit 71cf03b

Browse files
author
William Delanoue
committed
closes #201: $and can have more than 2 operands
1 parent 4189c1e commit 71cf03b

File tree

2 files changed

+36
-6
lines changed

2 files changed

+36
-6
lines changed

src/main/java/com/github/fakemongo/impl/ExpressionParser.java

+5-6
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
import java.util.Set;
2828
import java.util.UUID;
2929
import java.util.regex.Pattern;
30-
import org.bson.BSON;
3130
import org.bson.LazyBSONList;
32-
import org.bson.codecs.Encoder;
3331
import org.bson.types.Binary;
3432
import org.bson.types.MaxKey;
3533
import org.bson.types.MinKey;
@@ -371,7 +369,7 @@ public boolean apply(Object object) {
371369

372370
private ValueFilter buildValueFilter(final Object object) {
373371
if (isDbObject(object)) {
374-
return buildValueFilter(buildFilter(toDbObject(object)));
372+
return buildValueFilter(buildFilter(toDbObject(object)));
375373
}
376374
if (object instanceof Pattern) {
377375
return buildValueFilter((Pattern) object);
@@ -615,9 +613,10 @@ private Filter buildExpressionFilter(final List<String> path, Object expression)
615613
if (matchCount == 0) {
616614
return simpleFilter(path, expression);
617615
}
618-
if (matchCount > 2) {
619-
throw new FongoException("Invalid expression for key " + path + ": " + expression);
620-
}
616+
// WDEL : remove when trying to correct #201
617+
// if (matchCount > 2) {
618+
// throw new FongoException("Invalid expression for key " + path + ": " + expression);
619+
// }
621620
return andFilter;
622621
}
623622
} else if (expression instanceof Pattern) {

src/test/java/com/github/fakemongo/FongoTest.java

+31
Original file line numberDiff line numberDiff line change
@@ -3406,6 +3406,37 @@ public void should_fully_rename_a_collection() {
34063406
assertThat(dbObjects).containsExactly(new BasicDBObject("_id", 1).append("tags", new BasicDBList()));
34073407
}
34083408

3409+
@Test
3410+
public void should_$ne_on_empty_array_works() {
3411+
// Given
3412+
DBCollection collection = fongoRule.newCollection("db");
3413+
collection.insert(new BasicDBObject("_id", 1).append("tags", new BasicDBList()));
3414+
collection.insert(new BasicDBObject("_id", 2).append("tags", Util.list("Hi")));
3415+
3416+
// When
3417+
final List<DBObject> dbObjects = collection.find(new BasicDBObject("tags", new BasicDBObject("$ne", new BasicDBList()))).toArray();
3418+
3419+
// Then
3420+
assertThat(dbObjects).containsExactly(new BasicDBObject("_id", 2).append("tags", Util.list("Hi")));
3421+
}
3422+
3423+
// https://github.com/fakemongo/fongo/issues/201
3424+
@Test
3425+
public void should_$and_have_more_than_2_operands() {
3426+
// Given
3427+
DBCollection collection = fongoRule.newCollection("db");
3428+
collection.insert(new BasicDBObject("_id", 1).append("tags", new BasicDBList()));
3429+
collection.insert(new BasicDBObject("_id", 2).append("tags", Util.list("2")));
3430+
collection.insert(new BasicDBObject("_id", 3).append("tags", Util.list("4")));
3431+
collection.insert(new BasicDBObject("_id", 5).append("ntags", Util.list("4")));
3432+
3433+
// When
3434+
final List<DBObject> dbObjects = collection.find(new BasicDBObject("tags", new BasicDBObject("$exists", true).append("$ne", new BasicDBList()).append("$nin", Util.list("1", "2")))).toArray();
3435+
3436+
// Then
3437+
assertThat(dbObjects).containsExactly(new BasicDBObject("_id", 3).append("tags", Util.list("4")));
3438+
}
3439+
34093440
@Test
34103441
public void should_ping_fongo() {
34113442
// Given

0 commit comments

Comments
 (0)