使用嵌套布尔值进行mongo聚合

时间:2014-09-04 07:46:48

标签: mongodb mongodb-query aggregation-framework

我希望用嵌套的布尔值计算一个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}

感谢您的任何建议。

1 个答案:

答案 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的字段,则甚至只删除最后一个项目。