mongodb与组聚合排序

时间:2020-09-29 16:37:33

标签: node.js mongodb mongoose meteor

通过使用distinctDocuments,我可以为Collection获得$group的{​​{1}}组。

aggregates

这很好。但是,如何按字母降序对let uniqueFoos= Collection.rawCollection().aggregate([ { $group: { _id: 0, foos: { $addToSet: '$foo' } } } ]).toArray().await(); 数组排序?我知道如何独立执行此操作,但不知道如何将其插入管道中。我尝试将其插入之前和之后均无济于事。有什么想法吗?

foos链接到.sort()可以工作,但是我想通过查询本身来实现。谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用以下管道进行操作:

[
    {
        $group: {
            _id: "$foo",
        }
    },
    {
        $sort: { "_id": -1 }
    },
    {
        $group: {
            _id: 0,
            foos: {
              $push: '$_id'
            }
        }
    }
]

但是我认为如果只对数据进行分组和排序(而不在查询中构建数组)会更好。尝试以下管道:

[
    {
        $group: {
            _id: "$profile.name",
        }
    },
    {
        $sort: { "_id": -1 }
    }
]

,然后在代码中使用结果数组。

NB:还请注意,MongoDB具有distinct方法,但是您将必须使用js代码对结果进行排序。