我正在使用MongoDB shell版本:2.4.8,并且只想知道为什么嵌套数组搜索不能按预期工作。
假设我们有2个文档集,(a)用户:
{
"_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 }
(基本上说你需要在一个数组中传递$)......但那是我以为我原本在做什么的?折流板。
任何想法我做错了什么?
答案 0 :(得分:1)
db.collection.find()
返回一个游标 - 根据documentation。然后myUser.org_ids
为undefined
,但$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
将是与查询匹配的对象数组。