2013-01-16 28 views
3

我需要檢索包含數組中至少一個值的文檔。我的文檔的結構是:MongoDB - 通過整數數組搜索文檔

{ "_id": 3, 
"username": "111111", 
"name": "XPTO 1", 
"codes": [ 2, 4, 5 ], 
"available": true } 


{ "_id": 4, 
"username": "22222", 
"name": "XPTO 2", 
"codes": [ 3, 5 ], 
"available": true } 

我需要通過「代碼」做一個查找,如果我搜索值「5」,我需要檢索包含他們的陣列中該值的所有文檔。

我試着使用#elemMatch但沒有成功......

db.user.find({codes: {"$elemMatch": {codes: [2,8]}}}, {"codes":1}) 

我怎樣才能做到這一點?

在此先感謝。

+0

您可以使用'$ in'運算符來查找這個'db.user.find({code:{$ in:[2,8]}})'但它不會搜索這兩個位置值僅存在於單個文檔中,對於值爲2或8或兩者均爲2的文檔 – Sammaye

回答

8

您可以檢查數組內的值,就像比較某個字段的值一樣。 所以,你需要做的是這樣的,不使用$ elemMatch: -

  1. 如果你想檢查數組是否包含一個單值5: -

    db.user.find({codes: 5}, {codes:1}) 
    

    這將返回所有的文件,其中codes數組包含5

  2. 如果你想檢查數組是否包含值超出給定值的: -

    db.user.find({codes: {$in: [2, 8]}}, {codes:1}) 
    

    這將返回文檔包含2個或8

  3. 如果你想數組檢查數組是否包含列表中的所有值: -

    db.user.find({codes: {$all: [2, 5]}}, {codes:1}) 
    

    這將返回包含2和5的數組的所有文檔。

+0

文檔的相關部分是[here](http://docs.mongodb.org/manual/reference/operators/#comparison) 「註釋」框中說「如果只有一個項目匹配,包含數組的字段匹配條件運算符」。我認爲這是問題的關鍵。 – mayhewr

+0

@mayhewr ..我不太確定,這是否與此有關。我認爲,這裏關心的是精確匹配。但是,如果涉及範圍,那麼是的,這一點很重要。 :) –

+0

你是完全正確的。我讀得太快了。這一點只是假設我認爲它正試圖提出的觀點。這個文檔似乎假設你明白在mongo查詢中'equals'等價於'contains',我認爲這對於新用戶來說根本不明顯。鏈接頁面上第一個註釋的最後一行應爲「此查詢選擇** a **字段保存值爲** 42 **或包含** 42 **的數組的所有文檔。」我現在不會漫不經心。 – mayhewr