$ lookup之后我得到了结果
"comments": [
{
"_id": "58bd39a1518fb21803d8439d",
"comment": "Task1-comment",
"photo": null,
"userId": "589056bcc74270b81a890dce",
},
{
"_id": "58c034cc3c9af5141bca8a24",
"comment": "Dude",
"photo": null,
"userId": "589035b8603c0e9ebe5369c5",
}
现在我需要设置一个布尔说“userComment”,如果任何元素匹配我作为输入提供的userId。 我在聚合管道中写道
$project: { "userComment": { $eq: ["$comments.userId", mongoose.Types.ObjectId(userId)] } },
然后我输入userId为 589035b8603c0e9ebe5369c5 但它只返回userComment为假。
我该如何解决这个问题?任何帮助表示赞赏
答案 0 :(得分:0)
我认为错误是在比较数组的值之前,你需要首先解开数组的“注释”,因为只有这样你才能将光标移动到数组内的数组上,所以请编写代码{$unwind: "$comments" }
,并在应用您的项目查询之后。请记住,在解开之前,您需要首先投射“注释”数组。
答案 1 :(得分:0)
我这样解决了,
$project:{
"commentCount": {
"$filter": {
"input": "$comments",
"as": "comments",
"cond": { "$eq": ["$$comments.userId", mongoose.Types.ObjectId(userId)] }
}
}
},
$project: { "userComments": { $cond: { if: { $gt: [{ $size: '$commentCount' }, 0] }, then: true, else: false } } }
两次使用$ project,然后得到了预期的结果