【问题标题】:Mongo Aggregate - Get count of how many times multiple values appear in query resultsMongo Aggregate - 获取查询结果中出现多个值的次数
【发布时间】:2019-05-15 01:54:10
【问题描述】:

我正在尝试计算两个单独字段为真的次数。我有两个值“clickedWouldRecommend”和“clickedWouldNotRecommend”。这些值也默认为 FALSE。在界面中单击按钮时,它们被设置为 TRUE。我正在尝试查看每个 branch.name 有多少 clickedWouldRecommend = true 和多少 clickedWouldNotRecommend = true。

db.appointments.aggregate([
{
  $match: {
    $and: [
      {
        'branch.org_id': '100000'
      },
      { "analytics.clickedWouldRecommend": true },
      // Add OR statement to include analytics.clickedWouldNotRecommend = true?
    ]
  }
},
{
  $group: {
    _id: '$branch.name',
    wouldRecommend: { $sum: 1 }
  }
}
])

这提供了类似的结果:

 {
  "_id": [ 'Clinic Name' ],
   "wouldRecommend": 115.0
 }

我需要修改查询以查找 analytics.clickedWouldNotRecommend 设置为 true 的情况。我正在尝试获得与此类似的输出(如果可能,还要注意从 _id 中删除数组):

 {
  "name": 'Clinic Name'
   "wouldRecommend": 115,
   "wouldNotRecommend": 10
 },
 {
  "name": 'Second Clinic Name'
   "wouldRecommend": 200,
   "wouldNotRecommend": 12
 }

这是截断的模型/架构:

      {
  branch: [
    {
      name: {
        type: String,
        required: true
      },
      clinic_id: {
        type: String,
        required: true
      },
      org_id: {
        type: String
      }
    }
  ],
  analytics: {
    clickedWouldRecommend: {
      type: Boolean,
      default: false
    },
    clickedWouldNotRecommend: {
      type: Boolean,
      default: false
    }
  },
  date: {
    type: Date,
    default: Date.now
  }
};

【问题讨论】:

  • 为什么你不做两个简单的计数查询来获得不同的计数?这样做_id: '$branch.name',的目的是什么?我不明白这个问题。
  • @AnthonyWinzlet - 每个组织都有不同的分支。我需要找出推荐的总数,并且不会为特定组织下的每个分支推荐。例如,我指定了一个 org_id,并且将在一个组织下分配各种 branch_id。因此,我将获得每个分支的输出及其相应的 willRecommend 和 willNotRecommend 总数。

标签: node.js mongodb mongoose mongodb-query aggregation-framework


【解决方案1】:

您可以使用以下聚合

db.appointments.aggregate([
  { "$match": { "branch.org_id": "100000" }},
  { "$unwind": "$branch" },
  { "$facet": {
    "wouldRecommend": [
      { "$match": { "analytics.clickedWouldRecommend": true }},
      { "$group": { "_id": "$branch.name" }}
    ],
    "wouldNotRecommend": [
      { "$match": { "analytics.clickedWouldNotRecommend": true }},
      { "$group": { "_id": "$branch.name" }}
    ]
  }}
])

或者

db.appointments.aggregate([
  { "$match": { "branch.org_id": "100000" }},
  { "$unwind": "$branch" },
  { "$group": {
    "_id": "$branch.name",
    "wouldRecommend": {
      "$sum": {
        "$cond": [{ "$eq": ["$analytics.clickedWouldRecommend", true] }, 1, 0]
      }
    },
    "wouldNotRecommend": {
      "$sum": {
        "$cond": [{ "$eq": ["$analytics.clickedWouldRecommend", true]}, 1, 0]
      }
    }
  }}
])

【讨论】:

    猜你喜欢
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2019-12-30
    • 2021-04-29
    相关资源
    最近更新 更多