Mongodb:试图查找具有特定子文档字段的所有文档,为什么我的查询不起作用?
下面是我正在查询的集合中的一个文档示例Mongodb:试图查找具有特定子文档字段的所有文档,为什么我的查询不起作用?,mongodb,mongodb-query,Mongodb,Mongodb Query,下面是我正在查询的集合中的一个文档示例 meteor:PRIMARY> db.research.findOne({_id: 'Z2zzA7dx6unkzKiSn'}) { "_id" : "Z2zzA7dx6unkzKiSn", "_userId" : "NtE3ANq2b2PbWSEqu", "collaborators" : [ { "userId" : "aTPzFad8DdFXxRrX4" }
meteor:PRIMARY> db.research.findOne({_id: 'Z2zzA7dx6unkzKiSn'})
{
"_id" : "Z2zzA7dx6unkzKiSn",
"_userId" : "NtE3ANq2b2PbWSEqu",
"collaborators" : [
{
"userId" : "aTPzFad8DdFXxRrX4"
}
],
"name" : "new one",
"pending" : {
"collaborators" : [ ]
}
}
我想查找此集合中具有_userId:'atpzfad8ddfxxrx4'或来自collaborators数组的所有文档,userId:'atpzfad8ddfxrrx4'
因此,我想查看集合并检查_userId字段是否为“aTPzFad8DdFXxRrX4”。如果没有,则检查文档上的collaborators数组,并检查是否存在用户ID为“aTPzFad8DdFXxRrX4”的对象
以下是我尝试使用的查询:
db.research.find({$or: [{_userId: 'aTPzFad8DdFXxRrX4'}, {collaborators: {$in: [{userId: 'aTPzFad8DdFXxRrX4'}]}}] })
它找不到文档,并给我一个语法错误。我的问题是什么?谢谢操作符基本上是的简化版本,但实际上这里只有一个参数,所以您甚至不需要它。改用点表示法:
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':'aTPzFad8DdFXxRrX4'}
]
})
如果需要多个值,请在中使用$
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':{
“$in”:['aTPzFad8DdFXxRrX4','aTPzFad8DdFXxRrX5']
}}
]
})
操作符基本上是的简化版本,但实际上这里只有一个参数,因此您甚至不需要它。改用点表示法:
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':'aTPzFad8DdFXxRrX4'}
]
})
如果需要多个值,请在
中使用$
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':{
“$in”:['aTPzFad8DdFXxRrX4','aTPzFad8DdFXxRrX5']
}}
]
})
操作符基本上是的简化版本,但实际上这里只有一个参数,因此您甚至不需要它。改用点表示法:
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':'aTPzFad8DdFXxRrX4'}
]
})
如果需要多个值,请在
中使用$
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':{
“$in”:['aTPzFad8DdFXxRrX4','aTPzFad8DdFXxRrX5']
}}
]
})
操作符基本上是的简化版本,但实际上这里只有一个参数,因此您甚至不需要它。改用点表示法:
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':'aTPzFad8DdFXxRrX4'}
]
})
如果需要多个值,请在
中使用$
db.research.find({
“$or”:[
{u userId':'atpzfad8ddfxxrx4'},
{'collaborators.userId':{
“$in”:['aTPzFad8DdFXxRrX4','aTPzFad8DdFXxRrX5']
}}
]
})
我还是有点困惑。我使用$in操作符是因为Collaborator是一个对象数组。如果我在collaborators数组中查找一个具有关键用户ID的对象:“aTPzFad8DdFXxRrX4”,查询是否仍然有效?我认为使用“collaborators.userId”意味着collaborators不是数组,而是只有一个数组subkey@nearpointMongoDB和事实上的minimongo都允许您使用“点表示法”形式在数组中表示字段。因此,不要像那样指定“协作者”:{“userId”:
您可以按上图所示操作。
中的$in不是数组的专有项,而是可能匹配的值列表。这就是为什么它基本上是$或的简单版本。我仍然有点困惑。我使用$in运算符是因为collaborators是一个对象数组。如果我正在collaborators数组中查找对象要拥有一个关键用户ID:“aTPzFad8DdFXxRrX4”查询是否仍然有效?我认为使用“collaborators.userId”意味着collaborators不是数组,而是只有一个数组subkey@nearpointMongoDB和事实上的minimongo都允许您使用“点表示法”形式对数组中的字段进行表示,而不是像那样指定“协作者”:{“用户ID”:
您可以按上图所示操作。
中的$in不是数组的专有项,而是可能匹配的值列表。这就是为什么它基本上是$或的简单版本。我仍然有点困惑。我使用$in运算符是因为collaborators是一个对象数组。如果我正在collaborators数组中查找对象要拥有一个关键用户ID:“aTPzFad8DdFXxRrX4”查询是否仍然有效?我认为使用“collaborators.userId”意味着collaborators不是数组,而是只有一个数组subkey@nearpointMongoDB和事实上的minimongo都允许您使用“点表示法”形式对数组中的字段进行表示,而不是像那样指定“协作者”:{“用户ID”:
您可以按上图所示操作。
中的$in不是数组的专有项,而是可能匹配的值列表。这就是为什么它基本上是$或的简单版本。我仍然有点困惑。我使用$in运算符是因为collaborators是一个对象数组。如果我正在collaborators数组中查找对象要拥有一个关键用户ID:“aTPzFad8DdFXxRrX4”查询是否仍然有效?我认为使用“collaborators.userId”意味着collaborators不是数组,而是只有一个数组subkey@nearpointMongoDB和事实上的minimongo都允许您使用“点表示法”形式对数组中的字段进行表示,而不是像那样指定“协作者”:{“userId”:
您可以如上所示进行操作。
中的
$不是数组独有的,而是可能匹配的值列表。这就是为什么它基本上是
$或
的简单版本