聚合排序嵌套元素 - $ push {

时间:2016-05-04 10:11:16

标签: javascript mongodb database

我正在尝试按日期对某个集合中的某些条目进行分组,按日期排序日期'日期'然后按时间排序每天内的条目。

为了做到这一点,我使用mongo聚合按日对条目进行分组,但我不能在一天内订购这些条目。

我的条目集合如下所示: 默认收藏 - 未按任何标准排序

{
    name: "entry 1",
    date: 1457049600000,
    hour: 14
},
{
    name: "entry 2",
    date: 1487049600000,
    hour: 3
},
{
    name: "entry 3",
    date: 1487049600000,
    hour: 21
},
{
    name: "entry 4",
    date: 1487049600000,
    hour: 5
}

我用于聚合的代码: - 按天分组所有条目

{
    $group: {
        _id: "$dateTime",
        entries: {
            // pushes entries into a day
            // the entries are not push in any order
            $push: "$$ROOT"
        },
    }
},
{
    $sort : {
        _id : 1
    }
}

上面的代码将我的条目分组如下:

{
    _id: 1457049600000,
    entries: {
        {
            name: "entry 1",
            date: 1457049600000,
        }
    }
},
{
    _id: 1487049600000,
    entries: {
        {
            name: "entry 2",
            date: 1487049600000,
            hour: 3
        },
        {
            name: "entry 3",
            date: 1487049600000,
            hour: 21
        },
        {
            name: "entry 4",
            date: 1487049600000,
            hour: 5
        }
    }
}

我想对当天所包含的日期和条目进行排序,如下所示:

day1: {
    entries: {
        entry1: {
            name: "entry 1",
            date: 1457049600000,
            hour: 14
       }
    }
},
day2: {
    // entries sorted by hour
    entries: {
       entry2: {
            name: "entry 2",
            date: 1457049600000,
            hour: 3
       },
       entry4: {
           name: "entry 4",
           date: 1487049600000,
           hour: 5
       }
       entry1: {
            name: "entry 1",
            date: 1457049600000,
            hour: 14
       },
       entry3: {
            name: "entry 3",
            date: 1487049600000,
            hour: 21
       }

    }
}

我如何按时间对条目进行排序。在这种情况下,第二天我有两个条目,但它们没有任何订单。我假设我必须在聚合的$ push部分进行一些排序,但我不知道如何。

0 个答案:

没有答案