node.js - Mongo Aggregate - 获取查询结果中出现多个值的次数
问题描述
我正在尝试计算两个单独字段为真的次数。我有两个值“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
}
};
解决方案
您可以使用以下聚合
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]
}
}
}}
])
推荐阅读
- python - 在查找 Sigmoid 函数的导数时出现错误(numpy.ndarray 不可调用)
- delphi - Delphi Tchart在打印时未显示图例中的所有项目
- google-bigquery - 如何授予查看者从 Data Studio 更改 BigQuery 参数的权限
- java - 如何在 Spring Boot 应用程序的所有 API 方法中自动添加 Dropwizard Metrics @Timed?
- django - django 使用表单添加多个模型图像实例
- javascript - 循环只显示一个 Unicode 字符
- python - 保存文件时如何避免保存子文件夹?
- huawei-mobile-services - HUAWEI Scan Kit执行startScanFromFragment方法报错
- php - 带有 getDQL 查询的 symfony 子查询
- elasticsearch - Vega-Lite / Kibana:如何制作一个显示聚合之间计算的表格?