2013-04-15 59 views
2

值我不能找出如何檢查,如果某些價值是蒙戈文檔中的數組屬性。 例如,我有一些收藏的用戶,這樣的文件:MongoDB的查詢檢查,如果在數組屬性

{ 
    'name':'Paul', 
    'age':43, 
    'friendsIDs': [ ObjectId('qqq...'), ObjectId('www...'), ObjectId('eee...') ], 
} 

現在讓我們假設我要檢查,是ID的ObjectId(「QQQ ...」)保羅的朋友的用戶,或不。 這是很容易做到的幾乎所有的編程語言,例如PHP中它會是這樣的:

$isFriendOfPaul = in_array(ObjectId('qqq...'), $friendsIds); 

但如何在蒙戈查詢呢?有任何想法嗎?

回答

10

實際上,它是$manual

+0

請給我看查詢。 這是在$查詢反之亦然。 –

+0

「如果字段保持的陣列,則在操作員將$選擇其字段保存包含匹配指定數組中的值(例如等)的至少一種元素的數組的文件」 - 因此它應該雙向工作。所以,我想你可以設法得到它:'db.collection.find({friendsIDs:{$於:[YourIDValue]}})' – guessimtoolate

+0

非常感謝你,我會努力! –

1

您的查詢必須是這樣的:

db.collection.find({"name": "Paul", "friendsIDs": "qqq"}) 

此查詢查找文件名稱爲PaulfriendsIDs等於qqq

+0

「friendsIDs」是一個列表ID的(陣列),而不是一個ID –

+1

也能正常工作,即使'friendsIDs'是一個數組。 – JohnnyHK

1

這也可以用$eq

> db.person.insert({name: 'Paul', age: 43, friends: [1234, 2345, 3456]}) 
> db.person.insert({name: 'Dave', age: 23, friends: [2345, 3456]}) 
> db.person.insert({name: 'Stephen', age: 12, friends: [2345, 3456, 7890]}) 

做下面是一個使用$ eq的例子:

> db.person.find({friends: {$eq : 2345}}) 
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] } 
{ "_id" : ObjectId("54e34138fe135475834334db"), "name" : "Dave", "age" : 23, "friends" : [ 2345, 3456 ] } 
{ "_id" : ObjectId("54e3414bfe135475834334dc"), "name" : "Stephen", "age" : 12, "friends" : [ 2345, 3456, 7890 ] } 

但低於也是查詢找到相同的。就像斯文建議的那樣,你可以省去$ eq。

> db.person.find({friends: 2345}) 
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] } 
{ "_id" : ObjectId("54e34138fe135475834334db"), "name" : "Dave", "age" : 23, "friends" : [ 2345, 3456 ] } 
{ "_id" : ObjectId("54e3414bfe135475834334dc"), "name" : "Stephen", "age" : 12, "friends" : [ 2345, 3456, 7890 ] } 

> db.person.find({friends: 1234}) 
{ "_id" : ObjectId("54e34124fe135475834334da"), "name" : "Paul", "age" : 43, "friends" : [ 1234, 2345, 3456 ] }