Skip to content

All positional operator $[] throws JsonParseException in 1.5.0 #386

@hisener

Description

@hisener

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}}

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions