我希望计算一个带有嵌套布尔值的mongo聚合。
首先,我想要计算的文档id看起来像(在一个更简单的表示中):
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}
谢谢你的建议。
您的错误是没有为字段指定正确的变量,也取消了字段,但您也可以简化这一点:
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
的字段,那么甚至可以放弃最后一个项目。