簡體   English   中英

Java MongoDB查詢

[英]MongoDB Query with Java

我在MongoDB中具有以下數據庫結構(請參見下文),並且我想對“名稱”字段進行搜索查詢

數據庫結構:

         {
            "_id" : ObjectId("505ad9a7ed5022cbe1f3dc2e"),
            "id" : "10",
            "description" : "",  
            "members" : [{
              "id" : "1",
              "name" : "Jack" 
            }, {
              "id" : "2",
              "name" : "Mike" 
            }, {
              "id" : "3",
              "name" : "Laura" 
            }, {
              "id" : "4",
              "name" : "Sara" 
            }, {
              "id" : "240",
              "name" : "Ronald" 
            }],
            "status" : "active"
        },  
        {
            "_id" : ObjectId("5059c214707747cbc5819f6f"),
            "id" : "12",
            "description" : "",  
            "members" : [{
              "id" : "19",
              "name" : "Geoff" 
            }, {
              "id" : "21",
              "name" : "Andrew" 
            }, {
              "id" : "23",
              "name" : "Rachel" 
            }, {
              "id" : "25",
              "name" : "Susan" 
            }],
            "status" : "active"
        },  

我有以下代碼將在“說明”或“狀態”字段中進行搜索。 DBCollection集合= database.getCollection(“ members”);

        BasicDBObject or1 = new BasicDBObject(); 
        or1.put("description",  Pattern.compile(keyword, Pattern.CASE_INSENSITIVE)); 

        BasicDBObject or2 = new BasicDBObject(); 
        or2.put("status",  Pattern.compile(keyword, Pattern.CASE_INSENSITIVE));         

        BasicDBList or = new BasicDBList();
        or.add(or1); 
        or.add(or2);        

        BasicDBObject query = new BasicDBObject(); 
        query.put("$or", or);

        BasicDBObject select = new BasicDBObject();
        select.put("description", 1);  
        select.put("status", 1);    
        DBCollection collection = collection.find(query, select);

問題是,如何對“ members.name”字段進行“或”搜索? 因此,如果我要搜索名稱或文本“ Laura”,則ID / ID為10的文檔/記錄將出現在結果集中。

我是否必須遍歷所有結果或類似內容?

感謝您的幫助或建議!

如果我正確理解了這個問題,那實際上是一個關於如何在數組內部搜索單個字段的問題。 使用完整路徑到相關字段。 在這種情況下,它是“ members.name”。

現在,如果要將AND成員名稱在一起以查找包含兩個特定成員的記錄,只需像使用OR那樣將各個查詢放入BasicDBList中,然后再將AND在一起。 如果要包括另一個OR查詢列表,只需將該查詢對象(在上面的代碼示例中使用)扔到那個BasicDBList中,以將其與AND包括在一起。

暫無
暫無

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

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