需要获取以下查询才能正确输出

时间:2015-03-23 04:24:36

标签: mongodb-query

嗨,大家好我一整天都在努力构建这个简单的mongo查询,但我无法获得欲望输出。以下是查询和当前输出。

db.customers.aggregate(
{ $match : { "status" : "Closed" } },
{ $unwind: "$lines" },
{ $group : {
        _id:{label: "$lines.label",date: {$substr: [ "$date", 0, 10 ]}},
        values: { $push:  { date: {$substr: [ "$date", 0, 10 ]}} },
        count: { $sum: 1 }
    }},
{ $project : {
        _id : 1,
        values:1,
        count:1
    }}
);

其中输出以下内容。

{
    "result": [
        {
            "_id": {
                "label": "label",
                "date": "2010-10-01"
            },
            "values": [
                {
                    "date": "2010-10-01"
                },
                {
                    "date": "2010-10-01"
                },
                {
                    "date": "2010-10-01"
                },
                {
                    "date": "2010-10-01"
                }
            ],
            "count": 4
        },
        {
            "_id": {
                "label": "label",
                "date": "2010-10-10"
            },
            "values": [
                {
                    "date": "2010-10-10"
                }
            ],
            "count": 1
        },
        {
            "_id": {
                "label": "label",
                "date": "2010-07-25"
            },
            "values": [
                {
                    "date": "2010-07-25"
                }
            ],
            "count": 1
        }
    ]
}

然而,下面的输出是我正在寻找并且无法获得的输出。我显然可以在错误的地方获得我想要的所有数据。

{
    "result": [
        {
            "_id": "label",
            "values": [
                {
                    "date": "2010-11-27",
                    "count": 4
                },
                {
                    "date": "2010-10-10",
                    "count": 1
                },
                {
                    "date": "2010-07-25",
                    "count": 1
                }
            ]
        }
    ]
}

总是感谢您的帮助和支持。

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

db.customers.aggregate([
{ $match : { "status" : "Closed" } },
{ $unwind: "$lines" },
{ $group : {
        _id:{label: "$lines.label",date: {$substr: [ "$date", 0, 10 ]}},
        values: { $push:  { date: {$substr: [ "$date", 0, 10 ]}} },
        count: { $sum: 1 }
    }},
// This one I added to group them behind a single label in an array list
{ $group : {
        _id:{
                label: "$_id.label"
        },
        values : { 
               $push : { date : "$date", count : "$count" } 
        }
  }
},
{ $project : {
        _id : 1,
        values:1,
        count:1
  }
}
]);

如果我的问题正确,您希望将counts + dates分组到值数组中。您可以在第一组小组后使用$push