我需要这样的查询:
db.items.aggregate([
{
$group: {
_id: '$dataset_id',
labeledCount: {WHERE labels.length>0}, // this line is problem
totalCount: {$sum: 1}
}
}])
项目对象如下所示:
{
_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 }
}
}
]
)
现在我收到了错误:
“例外:虚线字段名称仅允许在顶层”,
答案 0 :(得分:0)
以下是答案:
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版本问题,否则我不确定可能是什么问题