-
Type: Bug
-
Resolution: Won't Fix
-
Priority: Major - P3
-
None
-
Affects Version/s: None
-
Component/s: Builders
-
None
-
(copied to CRM)
The Filters produce different query shapes between versions 3.12 and 4.0 of the driver.
In some situations this can result in 4.x producing an invalid query shape such as emitting a top level $not:
package com.tour; import com.mongodb.ConnectionString; import com.mongodb.MongoClientSettings; import com.mongodb.client.*; import com.mongodb.client.model.Filters; import org.bson.BsonDocument; import org.bson.Document; public class Test12 { public static void main(final String[] args) { ConnectionString mongoURI = new ConnectionString("mongodb://localhost:27017/test"); MongoClient mongoClient = MongoClients.create(mongoURI); MongoDatabase db = mongoClient.getDatabase("test"); MongoCollection<Document> coll = db.getCollection("foo"); BsonDocument filters = Filters.and( Filters.and( Filters.lt("field1", 100), Filters.gt("field2", 100)), Filters.and(Filters.not(Filters.and(Filters.lt("value", 1))))).toBsonDocument(BsonDocument.class, MongoClientSettings.getDefaultCodecRegistry()); System.out.println(filters); Document first = coll.find(filters).first(); System.out.println(first); } }
When testing the above in 3.12:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>3.12.7</version> </dependency>
output: {"field1": {"$lt": 100}, "field2": {"$gt": 100}, "value": {"$not": {"$lt": 1}}}
When testing the above in 4.0:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongodb-driver-sync</artifactId> <version>4.0.0</version> </dependency>
output: {"$and": [{"$and": [{"field1": {"$lt": 100}}, {"field2": {"$gt": 100}}]}, {"$and": [{"$not": {"$and": [{"value": {"$lt": 1}}]}}]}]} Exception in thread "main" com.mongodb.MongoQueryException: Query failed with error code 2 and error message 'unknown top level operator: $not' on server localhost:27017 at com.mongodb.internal.operation.FindOperation$1.call(FindOperation.java:661) at com.mongodb.internal.operation.FindOperation$1.call(FindOperation.java:651) at com.mongodb.internal.operation.OperationHelper.withReadConnectionSource(OperationHelper.java:583) at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:651) at com.mongodb.internal.operation.FindOperation.execute(FindOperation.java:79) at com.mongodb.client.internal.MongoClientDelegate$DelegateOperationExecutor.execute(MongoClientDelegate.java:178) at com.mongodb.client.internal.MongoIterableImpl.execute(MongoIterableImpl.java:135) at com.mongodb.client.internal.MongoIterableImpl.iterator(MongoIterableImpl.java:92) at com.tour.Test12.main(Test12.java:34)
- related to
-
JAVA-3338 $geoWithin cannot contain multiple fields
- Closed
-
SERVER-1454 Use $not as a top-level logical op
- Backlog
-
JAVA-4008 Document JAVA-4006 in Driver Upgrade notes
- Closed