在一个行为异常的聚合查询中使用 $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/