在一个 MongoDB 聚合查询中进行排序和分组

Rax*_*ter 4 sorting mongoose mongodb mongodb-query aggregation-framework

在一个聚合查询中使用$sort$group表现奇怪。

测试数据:

db.createCollection("test");

db.test.insert({
    ts : 100,
    category : 1
});

db.test.insert({
    ts : 80,
    category : 1
});

db.test.insert({
    ts : 60,
    category : 2
});

db.test.insert({
    ts : 40,
    category : 3
});
Run Code Online (Sandbox Code Playgroud)

因此,按ts所有排序看起来不错,但是当我同时使用两者时$sort$group结果顺序错误。询问:

db.test.aggregate([
{
    $sort : {ts: 1}
},
{
    $group:{"_id":"$category"}
}
]);
Run Code Online (Sandbox Code Playgroud)

结果以相反的顺序:

{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 3 }
Run Code Online (Sandbox Code Playgroud)

是 Mongo 功能还是我的误解?Maby mongo 首先应用分组,然后无法按缺失字段排序。出于这个原因,可能mongoose禁止使用 distinct 进行排序。

sty*_*ane 5

你需要先$group$sort结果。由于您只需要_id场地,因此您将需要$project舞台。

db.test.aggregate(
    [
        { "$group": { "_id": "$category" }},
        { "$sort" : { "ts": 1 }},
        { "$project": { "_id": 1 }}
    ]
);
Run Code Online (Sandbox Code Playgroud)