Javascript 使用node.js的MongoDB,我不知道如何对组聚合进行排序
我正在使用node.js与mongodb一起工作。我的查询给出了我想要的结果,但我似乎根本无法对其进行排序,无论我尝试按什么进行排序 下面是一个查询示例Javascript 使用node.js的MongoDB,我不知道如何对组聚合进行排序,javascript,node.js,mongodb,sorting,mongodb-aggregation,Javascript,Node.js,Mongodb,Sorting,Mongodb Aggregation,我正在使用node.js与mongodb一起工作。我的查询给出了我想要的结果,但我似乎根本无法对其进行排序,无论我尝试按什么进行排序 下面是一个查询示例 var query = function (db, callback) { var cursor = db.collection('collection').aggregate({ $match: { "startdatetime": { $
var query = function (db, callback) {
var cursor = db.collection('collection').aggregate({
$match: {
"startdatetime": {
$gte: new Date([fromDate]),
$lte: new Date([toDate])
}
}
},
{$match: {"depth": {$gte: depthFrom, $lte: depthTo}}},
{$unwind: "$dives"}, {$match: {"depth": {$gte: depthFrom, $lte: depthTo}}},
{
$group: {
_id: {year: {$year: "$startdatetime"},depth: "depth"},
average: {$avg: "$"+[parameter]}
}
}, {$sort: {year: 1,depth:1}});
cursor.each(function (err, doc) {
assert.equal(err, null);
if (doc != null) {
console.log(doc);
} else {
callback();
}
})
};
从中我得到了这个结果:
{ _id: { year: 2015, depth: 17.5 }, average: 7.809660041265659 }
{ _id: { year: 2015, depth: 16.5 }, average: 7.849712114661603 }
{ _id: { year: 2016, depth: 17.5 }, average: 7.402677186121112 }
{ _id: { year: 2016, depth: 16.5 }, average: 7.565136208888859 }
我希望得到这样的结果(按年份,然后按深度):
我尝试过按id:1、年份和深度进行排序,但无论我单独尝试还是组合尝试,结果都不会有任何变化
我做错什么了吗
提前感谢。问题是
年份
和深度
参数在\u id
对象下。因此,您应该使用以下方法进行排序:
{$sort: {'_id.year': 1, '_id.depth':1 }}
或者,您可以在排序之前添加项目阶段并删除\u id
嵌套:
{$project: {_id: 0, year: '$_id.year', depth: '$_id.depth', average: 1 }}
问题是
年份
和深度
参数在\u id
对象下。因此,您应该使用以下方法进行排序:
{$sort: {'_id.year': 1, '_id.depth':1 }}
或者,您可以在排序之前添加项目阶段并删除\u id
嵌套:
{$project: {_id: 0, year: '$_id.year', depth: '$_id.depth', average: 1 }}
我知道了!这是一个奇怪的问题。。。在玩了
$project
之后,我发现如果$project
位于查询的末尾,它就会被忽略,因此我尝试将两个$sort
放在后面。结果是,我的查询中最后一个被忽略了。现在,我的查询的结尾如下所示:
{$sort:{year:-1}},{$sort:{year:-1}});
我不知道这对我来说是一个特例,还是一个“正常”的bug,但希望我能把别人从我的挫折中解救出来。我找到了答案!这是一个奇怪的问题。。。在玩了
$project
之后,我发现如果$project
位于查询的末尾,它就会被忽略,因此我尝试将两个$sort
放在后面。结果是,我的查询中最后一个被忽略了。现在,我的查询的结尾如下所示:
{$sort:{year:-1}},{$sort:{year:-1}});
我不知道这对我来说是一个特例,还是一个“正常”的bug,但希望我能让其他人免于我的挫折。发布你收藏的样本文档发布你收藏的样本文档对不起,我应该提到我尝试了你的第一个建议,但它不起作用。你的第二个建议也是如此。这两个问题的解决方案是我在寻找解决方案时找到的,但无论我尝试按什么排序,都不会改变……对不起,我应该提到我尝试了你的第一个建议,但它不起作用。你的第二个建议也是如此。这两个问题的解决方案是我在寻找解决方案时找到的,但无论我尝试按什么排序,都不会改变。。。