Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb:试图查找具有特定子文档字段的所有文档,为什么我的查询不起作用?_Mongodb_Mongodb Query - Fatal编程技术网

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”:
您可以如上所示进行操作。
中的
$不是数组独有的,而是可能匹配的值列表。这就是为什么它基本上是
$或
的简单版本