我认为这应该很容易,但我无法弄明白。 我想要实现的是这个查询
{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);
答案 0 :(得分:1)
你所拥有的是正确的,并且不明确$ $ anded。
场景背后的Java Mongo驱动程序计算出什么时候到$以及什么时候不用。
例如
没有$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 }] }
答案 1 :(得分:0)
将查询转换为java代码以返回Iterable Document type
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");