首页 > 解决方案 > MongoDb - 使用多个和条件表达式查找计数

问题描述

以下查询为我提供了评论的所有投票数。

              $lookup: {
            from: "votesComments",
            as: "commentVotes",
            let: {
              commentI: "$_id"
            },
            pipeline: [
              {
                $match: {
                  $expr: {
                    $eq: [
                      "$commentId",
                      "$$commentI"
                    ],
                  },
                }
              },
              {
                $count: "votesTotal"
              },                  
            ]
          }

我正在寻找添加另一个 AND 条件来查找有多少票在“up”字段中有“1” - 这将使我计算所有 up 票。我尝试了下面的查询,但不起作用。

是否有一个简短的查询来获取所有评论的计数,其中 up 字段中的 1 为“upTotal”,并且还获取 down 字段中的所有 1 的计数,这将是 downvotes 的总数?

        $match: {
                  $and:[
                  {
                  $expr: {
                    $eq: [
                      "$commentId",
                      "$$commentI"
                    ],
                  },
                  $expr: {
                    $eq: [
                      "$up",
                      1
                    ],
                  },
                  },
                ]
                }

标签: mongodb

解决方案


我用过并且在错误的地方。然而,这不是找到上下投票的最佳方式,因为它需要 2 场比赛。

这不是我确定的最佳答案。

                  $match: {
                  $expr: {
                      $and: [
                      {
                      $eq: [
                        "$commentId",
                        "$$commentI"
                      ],
                      },
                      {
                      $eq: [
                        "$up",
                        1
                      ],
                    }
                    ]
                  },
                }

推荐阅读