使用$ in数组的MongoDB搜索不起作用

时间:2014-02-19 19:15:03

标签: arrays mongodb

我正在使用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 }

(基本上说你需要在一个数组中传递$)......但那是我以为我原本在做什么的?折流板。

任何想法我做错了什么?

1 个答案:

答案 0 :(得分: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将是与查询匹配的对象数组。