我希望用嵌套的布尔值计算一个mongo聚合来进行求和。
首先,我的文档想要计算看起来像(用更简单的表示):
document 1
{
key : 'value'
ack: {isAck: True}
... : ...
}
document 2
{
key : 'value'
ack: {isAck: True}
... : ...
}
document 3
{
key : 'value'
ack: {isAck: True}
... : ...
}
我的聚合查询目前看起来像是
aggregation query
{'$match': {key: 'value'}},
{'$project': {
'_id': True,
'ack.isAck': {'$cond' : [ "$ack.isAck", 1, 0 ] }
}
},
{'$group': {
'_id': {
'ack': '$ack',
},
'count': {'$sum': 1}
}
}
此查询返回3个文件女巫内容为:
{count: 3, 'ack': {isAck: True}}
我不知道出了什么问题以及如何只获得一个看似
的文档{count: 3 'ack' : 2}
感谢您的任何建议。
答案 0 :(得分:0)
你的错误是没有为字段指定正确的变量,也没有取消字段,但你也可以简化它:
db.collection.aggregate([
{ "$match": { "key": "value" } },
{ "$group": {
"_id": { "isAck": "$ack.isAck" },
"count": {
"$sum": {
"$cond": [ "$ack.isAck", 1, 0 ]
}
}
}},
{ "$project": {
"_id": 0,
"ack": "$_id",
"count": 1
}}
])
如果您可以在最终结果中处理被称为_id
而非ack
的字段,则甚至只删除最后一个项目。