簡體   English   中英

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

您擁有的是正確的,並且沒有明確地$ 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 }] }

將查詢轉換為Java代碼以返回Iterable Document類型

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM