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

标签 mongodb sorting mongoose 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
});

因此,当按 ts 排序时,一切看起来都不错,但是当我同时使用 $sort$group 时,结果顺序错误.查询:

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

结果倒序:

{ "_id" : 1 }
{ "_id" : 2 }
{ "_id" : 3 }

是Mongo的特性还是我的误会? Maby mongo 首先应用分组,然后不能按缺席字段排序。由于这个原因,mongoose 可能禁止在排序时使用 distinct。

最佳答案

您需要先对$group$sort 结果进行排序。由于您只需要 _id 字段,因此您将需要 $project 阶段。

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

关于mongodb - 在一个 MongoDB 聚合查询中进行排序和分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29278962/

相关文章:

java - 在 mongodb 中读取数组?

sql - NoSQL 设计原则与连接

javascript - 限制为mongodb之上和之下

javascript - 如何从异步函数获取数据并在获取数据后允许执行下一个代码

java - 无法匹配 Mongodb 中的模式搜索

mongodb - 如何使用单个 shell 脚本使用多个/三个节点/服务器/机器创建 MongoDB 集群?

Java - 这种排序方法是个谜

sorting - Grails:多个嵌套关系的分离标准

javascript - 过滤数组并查找拼接索引

javascript - 导入json Mongodb