以下是我正在查询的集合中的文档示例
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'}]}}] })
它找不到文档并给我一个语法错误。这是我的问题?感谢
答案 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']
}}
]
})