2012-10-18 107 views
1

我在文檔中的聯繫人數組中搜索包含特定_id的文檔。因此,這裏的結構:爲什麼不是mongo返回數組中的對象?

{ 
"_id": ObjectId("505c2daea9d397f2260001cd"), 
"contacts": [ 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("5061f8c66096eee07d000008") 
    }, 
    { 
     "userGroupId": ObjectId("505bf9476096ee990200000e"), 
     "userId": ObjectId("505c2daea9d397f2260001ce") 
    }, 
     { 
     "userGroupId": ObjectId("50422b75743d6c700e000004"), 
     "userId": ObjectId("506cff736096ee1e26000384") 
    }, 
    { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2daea9d397f2260001cf") 
    }, 
    { 
     "userGroupId": ObjectId("5050e86aa9d3977b67000000"), 
     "userId": ObjectId("506494ef6096ee021f000064") 
    }, 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("504d72246096ee2348000008") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

這裏的第二個文件:

{ 
"_id": ObjectId("505c2da0a9d397f2260000b7"), 
"contacts": [ 
     { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2da0a9d397f2260000b8") 
    }, 
    { 
     "userId": ObjectId("5061f8c66096eee07d000008"), 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

你會發現,這兩個文件具有的ObjectId在這些用戶ID(「50735e8e6096ee7c510002b9」)。我運行這個命令:

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } } 
}); 

這應該(我認爲)返回這兩個文件。但它只返回第二個文檔。不是第一個。我也試過:

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") }); 

它與$ elemMatch查詢做同樣的事情。

我可能錯過了一些非常基本的東西,但如果你們可以提供一些建議,我會很感激。

+0

我剛剛意識到的接觸是不是一個數組,它是一個數字索引的對象。(假設從一個PHP數組轉換負責人認爲) - 這會是問題嗎?爲什麼它會返回任何東西呢? – Micah

+2

「contacts」是一個數字鍵控對象而不是數組這一事實在這裏肯定是個問題。這些查詢不應該返回任何內容(並且當我在這些文檔上嘗試它們時不會返回)。 – JohnnyHK

+1

更正 - Rock Mongo正在詮釋這個錯誤。我查看了控制檯中的數據,它是一個數組。更正了上面的代碼。 – Micah

回答

0

這是應用程序層的問題,而不是Mongo。其中一條記錄是數字鍵,另一條記錄不是,我剛剛與Rock Mongo合作,似乎是所有陣列的關鍵。

感謝您的幫助JohnnyHK

相關問題