Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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
在id为';s在聚合mongodb中 嗨,我真的很难找到解决办法。 我想看看数组是否包含我给出的值_Mongodb_Mongoose - Fatal编程技术网

在id为';s在聚合mongodb中 嗨,我真的很难找到解决办法。 我想看看数组是否包含我给出的值

在id为';s在聚合mongodb中 嗨,我真的很难找到解决办法。 我想看看数组是否包含我给出的值,mongodb,mongoose,Mongodb,Mongoose,我要一个特定组织的所有票 组织保存在名为organizations的数组中的用户(创建者)中 模型 票证{ 创建者:“ObjectId” } 使用者{ 组织:[“ObjectId”、“ObjectId”] } 这就是我现在拥有的 Ticket.aggregate([ { “$lookup”:{ “发件人”:User.collection.name, “localField”:“创建者”, “外域”:“\u id”, “作为”:“创造者” } }, {“$REWIND”:“$creator”},

我要一个特定组织的所有票

组织保存在名为organizations的数组中的用户(创建者)中

模型
票证{
创建者:“ObjectId”
}
使用者{
组织:[“ObjectId”、“ObjectId”]
}
这就是我现在拥有的
Ticket.aggregate([
{
“$lookup”:{
“发件人”:User.collection.name,
“localField”:“创建者”,
“外域”:“\u id”,
“作为”:“创造者”
}
},
{“$REWIND”:“$creator”},
{“$match”:{“creator.organizations”:{
“$elemMatch”:{“$in”:[“60a77d5b57d8c960829a0343”]}
},
{“$set”:{“creator”:“$creator.\u id”},
])
这不管用 我了解到,不能在聚合中使用$elemMatch,因为它是一个查询。
我如何做到这一点?我见过有人说要使用$filter,但我不知道如何使用。

在这里不是必需的。这只能通过如下所示的
$match
实现

const mongoose=require(“mongoose”);
总票数([{
“$lookup”:{
“发件人”:User.collection.name,
“localField”:“创建者”,
“外域”:“\u id”,
“作为”:“创造者”
}
},
{
“$REWIND”:“$creator”
},
//修改代码
{
“$match”:{
“creator.organizations”:mongoose.Types.ObjectId(“60a77d5b57d8c960829a0343”)
}
},
{
“$set”:{
“创建者”:“$creator.\u id”
}
},

])
$elemMatch不是必需的,因为您已经解开了creator数组,只需尝试
{$match:{“creator.organizations”:{“$in”:[ObjectId(“60a77d5b57d8c960829a0343”)]}}}
,它只发送一个空数组。我仔细检查了来自组织的objectId,它应该返回一个票证。将来自组织的objectId添加为mongoose objectId(而不是字符串)。我修改了答案以反映这一点。