MongoDB java驱动程序使用$ in filter创建Document

时间:2018-01-22 16:51:27

标签: java mongodb mongodb-java

我认为这应该很容易,但我无法弄明白。 我想要实现的是这个查询

{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);

2 个答案:

答案 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"));

inValuesArrayList

ArrayList<String> inValues = new ArrayList<String> ();
inValues.add("main");
inValues.add("fun-inbox");