Mongoose - 如何按两个不同的计数分组
Posted
技术标签:
【中文标题】Mongoose - 如何按两个不同的计数分组【英文标题】:Mongoose - how to group by two different counts 【发布时间】:2017-06-19 15:09:21 【问题描述】:我需要这样的查询:
db.items.aggregate([
$group:
_id: '$dataset_id',
labeledCount: WHERE labels.length>0, // this line is problem
totalCount: $sum: 1
])
Item 对象如下所示:
_id: 1,
labels: [...]
...
结果应该是这样的:
_id: 1, labeledCount: 4, totalCount: 5,
_id: 2, labeledCount: 0, totalCount: 4,
...
编辑: 这是我最接近的:
db.items.aggregate(
[
$group :
_id : "$dataset_id",
"labeled" :
$sum :
$cond : if: "$labels.0": "$exists": true , then: 1, else: 0
,
"total" : $sum : 1
]
)
现在我收到错误:
"例外:虚线字段名只允许在顶层",
【问题讨论】:
【参考方案1】:答案如下:
db.items.aggregate(
[
$group :
_id : "$dataset_id",
"labeled" :
$sum :
$cond : if: $ne: [0, $size: "$labels" ], then: 1, else: 0
,
"total" : $sum : 1
]
)
说明: $size: "$labels"
返回labels
数组中的元素数。 $ne: [0, $size: "$labels" ]
检查 labels
是否有 0 个元素
编辑:我刚刚将它部署到服务器,它会引发以下错误:
例外:$cond 运算符需要一个包含 3 个操作数的数组
但在本地它可以工作。将尝试检查它是否是 mongo 版本问题,否则我不确定可能是什么问题
【讨论】:
这将适用于 2.6 及更高版本的 mongodb以上是关于Mongoose - 如何按两个不同的计数分组的主要内容,如果未能解决你的问题,请参考以下文章