1

私のドキュメントは次のように表示されます。uniq フィールドの検索を作成するにはどうすればよいですか?

KEYMAP が (SNUM="3151" and "SKEY"="THR" and "SID"="ID_HUT") であるドキュメントを検索する必要があります

 {     
    "CID":"2",
     "DESCRIPTION":"test",
     "SECKEY":"test",
     "API":{
          "SMS":"http://api.php",
          "DR":"http://api2.php"
        },
        "LOGS":{
             "IN":"log_cid_in_1",
             "OUT": "log_cid_out_1"
        },
        "KEYMAP":[              
            {"SNUM":"3151","SKEY":"THR", "SID":"ID_HUT"},
            {"SNUM":"3152","SKEY":"ONE", "SID":"ID_XL"},
            {"SNUM":"3153","SKEY":"TWO", "SID":"ID_INDO"}

        ]

    }    

    db.content_provider_map.ensureIndex({"KEYMAP.SNUM":1,"KEYMAP.SKEY":1,"KEYMAP.SID":1},{unique:true});
        db.mycollection.find({"KEYMAP.SNUM":"3151","KEYMAP.SKEY":"TWO","KEYMAP.SID":"ID_XL"});# not work. it find the document
4

1 に答える 1

1

$elemMatchここで(http://docs.mongodb.org/manual/reference/operators/#_S_elemMatch)を次のように使用したいと思います:

find({KEYMAP: {$elemMatch: {SNUM: "3151", SKEY: "TWO", SID: "ID_XL"}}})

また、サブドキュメントの一意のインデックスは、おそらくあなたが思っているようには機能しません。それらは、その 1 つのドキュメントだけでなく、すべてのドキュメントにわたって一意性を生み出します。その 1 つのドキュメントに一意のインデックスが必要な$addToSet場合は、サブドキュメントに upsert 関数などを使用する必要があります。

于 2012-11-30T09:18:54.347 に答える