2014-02-19 36 views
1

我正在使用MongoDB外殼版本:2.4.8,並只想知道爲什麼嵌套數組搜索不能正常工作。

假設我們有2點文檔集合,(一)用戶:

{ 
    "_id" : ObjectId("u1"), 
    "username" : "user1", 
    "org_ids" : [ 
     ObjectId("o1"), 
     ObjectId("o2") 
    ] 
} 
{ 
    "_id" : ObjectId("u2"), 
    "username" : "user2", 
    "org_ids" : [ 
     ObjectId("o1") 
    ] 
} 

和(b)組織:

{ 
    "_id" : ObjectId("o1"), 
    "name" : "Org 1" 
} 
{ 
    "_id" : "ObjectId("o2"), 
    "name" : "Org 2" 
} 

收藏已經爲

Users._id, Users.org_id, Organisations._id 

我會定義索引喜歡查找特定用戶所屬的所有組織。

我已經試過這樣:

> myUser = db.Users.find({ _id: ObjectId("u1") }) 
> db.Organisations.find({ _id : { $in : [myUser.org_ids] }}) 

但它產生什麼結果。我也試過這樣:

> myUser = db.Users.find({ _id: ObjectId("u1") }) 
> db.Organisations.find({ _id : { $in : myUser.org_ids }}) 

但它輸出的錯誤:

error: { "$err" : "invalid query", "code" : 12580 } 

(這基本上說,你需要在一個數組傳遞$)......但是這就是我想我是原來呢?百思不得其解。

任何想法我做錯了什麼?

回答

1

db.collection.find()返回一個遊標 - 根據documentation。然後myUser.org_idsundefined,但$in字段必須是數組。讓我們看看解決方案!


_id在集合中是獨一無二的。所以,你可以做findOne

myUser = db.Users.findOne({ _id: ObjectId("u1") }) 
db.Organisations.find({ _id : { $in : myUser.org_ids }}) 

如果你正在尋找一個非唯一的領域,你可以使用toArray

myUsers = db.Users.find({ username: /^user/ }).toArray() 

然後myUsers將匹配的查詢對象的數組。

+0

謝謝,完全按照它在罐子上說的那樣工作;-) – mercyweeps

+0

@mercyweeps不客氣! :-)很高興幫助你! –