在阵列的情况下mongodb中的$ eq

时间:2017-06-28 16:00:06

标签: mongodb

$ 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为假。

我该如何解决这个问题?任何帮助表示赞赏

2 个答案:

答案 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,然后得到了预期的结果