首页 > 解决方案 > 查询文档以遍历 Array 并使用 $cond 对 mongodb 中 JSON 的特定属性求和

问题描述

我有一个JSON这样的数组:

let x = [{"Data":"Chocolate","Company":"FiveStar"},{"Data":"Biscuit","Company":"Parle"},{"Data":"Chocolate","Company":"DairyMilk"}]

这是一个示例数组JSON。我想要做的是如何使用 MongoDB$cond来计算所有“数据”等于巧克力的字段?

标签: javascriptnode.jsjsonmongodbmongoose

解决方案


如果你想坚持,$cond那么你可以像这样运行查询:

db.collection.aggregate([
  {
    $match: {
      Data: "Chocolate"
    }
  },
  {
    $group: {
      _id: "$Data",
      count: {
        $sum: {
          $cond: [
            {
              $eq: [
                "$Data",
                "Chocolate"
              ]
            },
            1,
            0
          ]
        }
      }
    }
  }
])

您可以在此处查看此查询的结果。


您可以看到,首先我使用$matchData获得了所有等于 "Chocolate" 的元素。

稍后,我们可以使用$sum来获取与$cond条件匹配的元素的计数,1如果相等则返回,否则返回0

在这种情况下,无论如何,我们只剩下Data等于“巧克力”的那个。


当然,简单地运行会更快更容易:

db.collection.aggregate([
  {
    $match: {
      Data: "Chocolate"
    }
  },
  {
    $count: "count"
  }
])

这个查询的例子在这里


推荐阅读