Mongodb:试图查找具有特定子文档字段的所有文档,为什么我的查询不起作用?

时间:2014-08-01 03:08:20

标签: mongodb mongodb-query

以下是我正在查询的集合中的文档示例

meteor:PRIMARY> db.research.findOne({_id: 'Z2zzA7dx6unkzKiSn'})
{
    "_id" : "Z2zzA7dx6unkzKiSn",
    "_userId" : "NtE3ANq2b2PbWSEqu",
    "collaborators" : [
        {
            "userId" : "aTPzFad8DdFXxRrX4"
        }
    ],
    "name" : "new one",
    "pending" : {
        "collaborators" : [ ]
    }
}

我希望使用_userId:' aTPzFad8DdFXxRrX4'来查找此集合中的所有文档。或者来自协作者数组,userId:' aTPzFad8DdFXxRrX4'

所以我想查看集合并检查_userId字段是否是' aTPzFad8DdFXxRrX4'。如果没有,则检查文档上的协作者数组,并检查是否存在具有userId的对象:' aTPzFad8DdFXxRrX4'。

以下是我尝试使用的查询:

db.research.find({$or: [{_userId: 'aTPzFad8DdFXxRrX4'}, {collaborators: {$in: [{userId: 'aTPzFad8DdFXxRrX4'}]}}] })

它找不到文档并给我一个语法错误。这是我的问题?感谢

1 个答案:

答案 0 :(得分:3)

$in运算符基本上是$or的简化版本,但您实际上只有一个参数,所以您甚至不需要它。改为使用点符号:

db.research.find({
    '$or': [
        { '_userId': 'aTPzFad8DdFXxRrX4'},
        { 'collaborators.userId': 'aTPzFad8DdFXxRrX4'}
    ] 
})

如果您需要多个值,请使用$in

db.research.find({
    '$or': [
        { '_userId': 'aTPzFad8DdFXxRrX4'},
        { 'collaborators.userId': { 
            '$in': ['aTPzFad8DdFXxRrX4','aTPzFad8DdFXxRrX5']
        }}
    ] 
})