首页 > 解决方案 > MongoDB:对数组中对象中值==“某些字符串”的次数求和

问题描述

我有一个 MongoDB 文档,看起来像这样:

{
  "_id": 000000000001,
  "sample": [
    {
      "_id": {
        "$oid": "12345678910"
      },
      "Phone": 5555555555,
      "LastName": "Musk",
      "FirstName": "Elon",
      "responses": {
        "question1": "hello",
        "question2": "world"
      }
    },
    {
      "_id": {
        "$oid": "12345678911"
      },
      "Phone": "1111111111",
      "LastName": "Jobs",
      "FirstName": "Steve",
      "responses": {
        "question1": "goodbye",
        "question2": "world"
      }
    }
  ]
}

我想得到$sum所有对 做出回应helloquestion1人和所有对 做出回应的worldquestion2

例如。我想要一个看起来像这样的响应:

{ 'question1': 1, 'question2': 2 }

我的查询看起来像这样,但它不起作用。0只有当我知道情况并非如此时,它才会返回任何给定的金额。

db.collection(collection).aggregate([
  { $match : { } },
  { $group: {
     _id: "responses", 
     "question1": { $sum: { $cond: [ { $eq: [ "$sample.responses.question1", "hello"] }, 1, 0 ] } },
     "question2": { $sum: { $cond: [ { $eq: [ "$sample.responses.question2", "world"] }, 1, 0 ] } }
    }
  }
])

谁能帮我吗?

标签: mongodbmongooseaggregation-framework

解决方案


推荐阅读