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

我相信您想在这里使用$elemMatchhttp://docs.mongodb.org/manual/reference/operators/#_S_elemMatch),例如:

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

此外,子文档上的唯一索引也不会像您认为的那样工作。它们在所有文档中创建唯一性,而不仅仅是一个文档。如果您想要一个文档上的唯一索引,那么您将需要$addToSet在子文档上使用类似或 upsert 函数。

于 2012-11-30T09:18:54.347 回答