MongoDB java 驱动程序使用 $in 过滤器创建文档
MongoDB java driver create Document with $in filter
我认为这应该很容易做到,但我就是想不通。
我想要实现的是这个查询
{inbox:{$in:["main","fun-inbox"]} ,status:"Open"}
我设法让它像这样工作
Bson q = Filters
.and(Filters
.in("inbox", inboxes),
Filters
.eq("status", statusID));
但这不是一回事,因为我使用了 $and
运算符
可以使用 Document
来完成吗?
这是我尝试过的,我知道我定义它的方式是错误的,但我举这个例子只是为了更好地理解我想要实现的目标
Document q1 = new Document()
.append("inbox", Filters.in("inbox", inboxes))
.append("status", statusID);
已将您的查询转换为 java 代码为 return 可迭代文档类型
FindIterable<Document> iterable = database.getCollection("mails").find(new Document("inbox", new Document("$in", inValues)).append("status", "open"));
和 inValues
是一个 ArrayList
作为
ArrayList<String> inValues = new ArrayList<String> ();
inValues.add("main");
inValues.add("fun-inbox");
你所拥有的是正确的,它不是明确地$anded。
Java Mongo driver 在幕后计算何时 $ 何时不 $。
例如
没有$and
Bson bson = Filters.and(Filters.in("inbox", inboxes), Filters.eq("status", status));
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
System.out.print(bsonDocument.toString()); //{ "inbox" : { "$in" : inboxes }, "status" : status }
和$and
Bson bson = Filters.and(Filters.in("inbox", inboxes), Filters.eq("inbox", inbox));
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
System.out.print(bsonDocument.toString()); //{ "$and" : [{ "inbox" : { "$in" : inboxes } }, { "inbox" : inbox }] }
我认为这应该很容易做到,但我就是想不通。 我想要实现的是这个查询
{inbox:{$in:["main","fun-inbox"]} ,status:"Open"}
我设法让它像这样工作
Bson q = Filters
.and(Filters
.in("inbox", inboxes),
Filters
.eq("status", statusID));
但这不是一回事,因为我使用了 $and
运算符
可以使用 Document
来完成吗?
这是我尝试过的,我知道我定义它的方式是错误的,但我举这个例子只是为了更好地理解我想要实现的目标
Document q1 = new Document()
.append("inbox", Filters.in("inbox", inboxes))
.append("status", statusID);
已将您的查询转换为 java 代码为 return 可迭代文档类型
FindIterable<Document> iterable = database.getCollection("mails").find(new Document("inbox", new Document("$in", inValues)).append("status", "open"));
和 inValues
是一个 ArrayList
作为
ArrayList<String> inValues = new ArrayList<String> ();
inValues.add("main");
inValues.add("fun-inbox");
你所拥有的是正确的,它不是明确地$anded。
Java Mongo driver 在幕后计算何时 $ 何时不 $。
例如
没有$and
Bson bson = Filters.and(Filters.in("inbox", inboxes), Filters.eq("status", status));
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
System.out.print(bsonDocument.toString()); //{ "inbox" : { "$in" : inboxes }, "status" : status }
和$and
Bson bson = Filters.and(Filters.in("inbox", inboxes), Filters.eq("inbox", inbox));
BsonDocument bsonDocument = bson.toBsonDocument(BsonDocument.class, MongoClient.getDefaultCodecRegistry());
System.out.print(bsonDocument.toString()); //{ "$and" : [{ "inbox" : { "$in" : inboxes } }, { "inbox" : inbox }] }