带有嵌套布尔值的mongo聚合



我希望计算一个带有嵌套布尔值的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的字段,那么甚至可以放弃最后一个项目。

最新更新