2012-11-30 61 views
1

你可以看到我的文檔如下圖。我怎樣才能爲我的uniq字段寫一個find?Mongodb找到錯誤的文檔

我需要尋找一個文檔,其中鍵盤映射(SNUM = 「3151」 和 「SKEY」= 「THR」 和 「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 

回答

1

我相信你想使用$elemMatchhttp://docs.mongodb.org/manual/reference/operators/#_S_elemMatch)喜歡這裏:

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

同樣在子文檔唯一索引不工作,你可能會認爲他們的方式。它們在所有文檔中創建獨特性,而不僅僅是一個文檔。如果你想在這個文檔上使用唯一索引,那麼你需要在子文檔上使用$addToSet或者一個upsert函數。