0

MongoDB に次のデータベース構造があり (以下を参照)、フィールド 'name' で検索クエリを実行したい

データベース構造:

         {
            "_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' で OR 検索を行うにはどうすればよいですか? したがって、名前またはテキスト「Laura」を検索すると、ID 10 のドキュメント/レコードが結果セットに含まれます。

すべての結果またはそのようなものをループする必要がありますか?

助けや提案をありがとう!

4

1 に答える 1

0

質問を正しく理解していれば、配列内の単一フィールドを検索する方法についての質問です。問題のフィールドへのフル パスを使用します。この場合は「members.name」です。

ここで、2 つの特定のメンバーを含むレコードを検索するためにメンバー名を AND で結合する場合は、OR で行ったように、個々のクエリを BasicDBList に入れ、それらを AND で結合します。他の OR クエリ リストを含めたい場合は、そのクエリ オブジェクト (上記のコード サンプルで使用) をその BasicDBList に投げて、AND に含めるだけです。

于 2016-07-01T18:19:40.200 に答える