如何通过查找中的特定字段填充文档



我的user文档是这样的,

{
"_id": ObjectId("61408128f3c4b105c21c6e60"),
"business_idea" : [
{
"business_tags" : [
ObjectId("61408128f3c4b105c21c6e60")
],
"isDefault" : true,
"isDeleted" : false,
"likedByList" : [
ObjectId("615829aa55f3cc0a8c180a2b"), // _id Foreign key for likes
ObjectId("615829aa55f3cc0a8c180a2c")
],
"_id" : ObjectId("61556463aad46252d621b30d"),
"business_id" : "61556463aad46252d621b30b",
"business_name" : "ST Business",
"business_name_to_lower" : "st business",
"business_type" : "limited liability company",
"business_desc" : "test brief description",
"business_logo" : "https://neur-dev.s3.ap-south-1.amazonaws.com/logo/jainx%20logo1632986208841.png"
}
]
}

likes文档看起来像这样,

{
"_id" : ObjectId("615829aa55f3cc0a8c180a2b"),
"likedFlag" : true,
"isDeleted" : false,
"likeLocation" : "idea",
"targetId" : ObjectId("61556463aad46252d621b30c"),
"createdBy" : ObjectId("61456816b1f55166ab50d023"),
"ideaId" : "61556463aad46252d621b30d",
"createdAt" : ISODate("2021-10-02T15:13:06.255+05:30"),
"updatedAt" : ISODate("2021-10-02T15:13:06.255+05:30"),
"__v" : 0
}

现在我的问题是,我只想填充喜欢的用户,其中likes.createdBy等于前端提供的_id

我使用下面的查询,它返回我所有喜欢的文档,匹配_id,请找到下面的查询,

db.users.aggregate([
{
$lookup: {
from: "universities",
localField: "university",
foreignField: "_id",
as: "university",
},
},
{ $lookup: {
from: "likes",
localField: "business_idea.likedByList",
foreignField: "_id",
as: "liked"
} },
{ $match: { "business_idea.isDeleted": false } },
{ $project: { ideaList: "$business_idea", university: "$university.type", likeditem: "$liked" } },
{ $unwind: "$ideaList" }
])

请帮助我填充只喜欢的文档,这个createdBy字段与提供的_id匹配。

请帮我一下。谢谢。

这是解决方案,它可能会帮助别人。

db.users.aggregate([
{
$lookup: {
from: "universities",
localField: "university",
foreignField: "_id",
as: "university",
},
},
{ $lookup: {
from: "likes",
localField: "business_idea.likedByList",
foreignField: "_id",
as: "liked"
} },
{ $match: { "business_idea.isDeleted": false } },
{ $project: { ideaList: "$business_idea", university: "$university.type", likeditem: {
list: {$filter: {
input: '$liked',
as: 'item',
cond: {$eq: ['$$item.createdBy', ObjectId('61456816b1f55166ab50d023')]}
}}
} } },
{ $unwind: "$ideaList" }
])

最新更新