Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 在聚合结果中对子数组进行排序_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 在聚合结果中对子数组进行排序

Mongodb 在聚合结果中对子数组进行排序,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有三份文件: { "id_user": "t57092501745ad6285ac58c22", "name": "Day #1", "date": { "$date": "2016-04-21T20:50:00.190Z" }, "text": "My text" } { "id_user": "t57092501745ad6285ac58c22", "name": "Day #2", "date": {

我有三份文件:

{
    "id_user": "t57092501745ad6285ac58c22",
    "name": "Day #1",
    "date": {
        "$date": "2016-04-21T20:50:00.190Z"
    },
    "text": "My text"
}

{
    "id_user": "t57092501745ad6285ac58c22",
    "name": "Day #2",
    "date": {
        "$date": "2016-04-22T20:50:00.190Z"
    },
    "text": "My text"
}

{
    "id_user": "t57092501745ad6285ac58c22",
    "name": "Day #3",
    "date": {
        "$date": "2016-04-22T20:51:00.190Z"
    },
    "text": "My text"
}
我需要每天对这些进行分组,所以我会:

{
    "$match": {
        "id_user": "t57092501745ad6285ac58c22"
    }
}, {
    "$sort": {
        "date": -1
    }
}, {
    "$group": {
        "_id": {
            $dayOfYear: "$date"
        },
        "data": {
            "$push": {
                "id_user": "$id_user",
                "name": "$name",
                "date": "$date",
                "text": "$text"
            },
        },
    }

}
结果是:

{
    {
        _id: 113,
        data: [{
            "id_user": "t57092501745ad6285ac58c22",
            name: "Day #1",
            date: "2016-04-22T20:51:00.190Z",
            text: "My text"
        }]
    }, {
        _id: 114,
        data: [{
            "id_user": "t57092501745ad6285ac58c22",
            name: "Day #3",
            date: "2016-04-23T20:51:00.190Z",
            text: "My text"
        }, {
            "id_user": "t57092501745ad6285ac58c22",
            name: "Day #2",
            date: "2016-04-23T20:50:00.190Z",
            text: "My text"
        }]
    }
}
没关系,但订单不是我需要的:

{ Day #1 }, { Day #3, Day #2 }
如果我将
排序
更改为
{“日期”:1}
我可以颠倒两组的顺序,方法如下:

{ Day #3, Day #2 }, { Day #1 }
但我不知道如何更改子数组中的顺序,以获得正确的:

{ Day #1 }, { Day #2, Day #3 }

正确的方法是什么?

如果您希望“数组”中的项目按“升序”排列,那么您的
$sort
顺序是错误的,您需要将其反转。另外,
$group
作为“文档”的输出不会以任何方式排序。因此,如果您想要一个特定的订单,那么您实际上还需要对返回的
\u id
进行
$sort

[
{“$match”:{
“id_用户”:“t57092501745ad6285ac58c22”
}},
{“$sort”:{“日期”:1}
{“$组”:{
“_id”:{“$dayOfYear”:“$date”},
“数据”:{
“$push”:{
“id_用户”:“$id_用户”,
“名称”:“$name”,
“日期”:“$date”,
“文本”:“$text”
}
}
}},
{“$sort”:{“\u id”:1}
]

然后这两个顺序都是正确的

您按“降序”排序。改为“升序排序:
{“$Sort”:{“date”:1}}
不,正如我所说,这不起作用,请阅读我的问题。是的,它起作用,请思考一下。在添加到数组之前,
$sort
,因此,
$push
将遵循
$sort
中的发现顺序,并且“数组元素”将以这种方式排序(更正了
$sort
顺序。
$group
没有。因此,如果您想要“文档”如果要按顺序发出,则需要另一个
$sort
作为最后一个管道阶段(也是升序)。
{“$sort”:{“\u id”:1}
。仔细看,第3天是“以后”日期大于第2天。因此您的顺序错误,并且没有注意到
$group
没有按顺序发出。@BlakesSeven是的,谢谢,这是正确的答案!这对我来说不明显,谢谢。如果您将此作为答案,我将关闭此问题。再次感谢。