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