-
Notifications
You must be signed in to change notification settings - Fork 147
Open
Labels
Description
After upgrading Jongo 1.5.0, we started seeing JsonParseException in a couple of places where we use all positional operator $[]. Our usages are the same as the example in MongoDB doc.
BsonQueryFactory#addRequiredQuotesAndParameters seems like the culprit as it applies the following transformations, and therefore BasicDBObject.parse fails:
{ $set: { array.$[].id: 10 } } -> {"$set":{[ array.$]".id": 10 } }
My test case in BsonQueryFactoryTest:
@Test
public void allPositionalOperator() {
assertThatCode(() -> factory.createQuery("{ $set: { array.$[].id: 10 } }")).doesNotThrowAnyException();
}Failure:
java.lang.AssertionError:
Expecting code not to raise a throwable but caught
"java.lang.IllegalArgumentException: Cannot parse query: { $set: { array.$[].id: 10 } }
at org.jongo.query.BsonQueryFactory.createQuery(BsonQueryFactory.java:106)
at org.jongo.query.BsonQueryFactoryTest.lambda$allPositionalOperator$0(BsonQueryFactoryTest.java:390)
...
Caused by: org.bson.json.JsonParseException: JSON reader was expecting a name but found '['.
at org.bson.json.JsonReader.readBsonType(JsonReader.java:146)
at com.mongodb.DBObjectCodec.readDocument(DBObjectCodec.java:397)
at com.mongodb.DBObjectCodec.readValue(DBObjectCodec.java:322)
at com.mongodb.DBObjectCodec.readDocument(DBObjectCodec.java:399)
at com.mongodb.DBObjectCodec.decode(DBObjectCodec.java:167)
at com.mongodb.DBObjectCodec.decode(DBObjectCodec.java:67)
at com.mongodb.BasicDBObject.parse(BasicDBObject.java:83)
at com.mongodb.BasicDBObject.parse(BasicDBObject.java:70)
at org.jongo.query.BsonQueryFactory.createQuery(BsonQueryFactory.java:99)
Also, Jongo 1.4.1 returns the expected query:
{"$set": {"array.$[].id": 10}}
Stephan202, nathankooij and anicolasgar