簡體   English   中英

如何在mongodb和Java中使用$和兩個文件?

[英]How to $and two documents in mongodb and Java?

我正在使用mongodb與Java 3.0驅動程序。 我有一個場景,我必須執行邏輯和ie, $and我的查詢。 例如,我已經創建了兩個文檔,我正在嘗試這樣做:

iterable = mongoDatabase.getCollection("restaurants").find(
                                              new Document("$and", asList(abc,
                                                     updatedDocumentTypeOne)));

其中abc是一個文檔, updatedDocumentTypeOne是另一個文檔。 我在mongodb手冊中發現了這個,但是我在第一次創建asList方法時遇到錯誤。

或者如何在Java中復制以下內容:

db.inventory.find( {
    $and : [
        { $or : [ { price : 0.99 }, { price : 1.99 } ] },
        { $or : [ { sale : true }, { qty : { $lt : 20 } } ] }
    ]
} )`

您還可以嘗試下面的代碼,為Java中的查詢復制添加過濾器:

// Where db is the object reference of "inventory" collection's database
 MongoCollection<Document> inventory = db.getCollection("inventory");

//List for result return
 List<Document> result = new ArrayList<Document>();

//Query replication in Java and return result into the list
 inventory.find(Filters.and(
            Filters.or(Filters.eq("price", 0.99),Filters.eq("price", "1.99")),
            Filters.or(Filters.eq("sale", true),Filters.lt("qty", 20))
            )).into(result);

從asList()更改為Arrays.asList()

您沒有編寫Arrays.asList(),而是指定為asList()。 因此編譯器正在搜索asList()方法,該方法不可用。

檢查以下代碼:

iterable = mongoDatabase.getCollection("restaurants").find(
                                                new Document("$and", Arrays.asList(abc,
                                                        updatedDocumentTypeOne)));

對於您的上述查詢,您可以編碼如下:

/* First OR condition */
Document price1 = new BasicDBObject("price",0.99);
Document price2 = new BasicDBObject("price",1.99);

BasicDBList or_first = new BasicDBList();
or_first.add(price1);
or_first.add(price2);
DBObject query = new BasicDBObject("$or", or_first);

/* Second OR condition */
boolean val = true;
Document sale = new BasicDBObject("sale",val);
Document qty = new BasicDBObject("qty", new BasicDocument("$lt",20));

BasicDBList or_second = new BasicDBList();
or_second.add(sale);
or_second.add(qty);
DBObject query = new BasicDBObject("$or", or_second);

/* AND condition logic */
BasicDBList and_op = new BasicDBList();
and_op.add(or_first);
and_op.add(or_second);

iterable = mongoDatabase.getCollection("restaurants").find( new Document("$and", and_op )); 

暫無
暫無

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

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