Javascript 使用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": { $

我正在使用node.js与mongodb一起工作。我的查询给出了我想要的结果,但我似乎根本无法对其进行排序,无论我尝试按什么进行排序

下面是一个查询示例

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,但希望我能让其他人免于我的挫折。

发布你收藏的样本文档发布你收藏的样本文档对不起,我应该提到我尝试了你的第一个建议,但它不起作用。你的第二个建议也是如此。这两个问题的解决方案是我在寻找解决方案时找到的,但无论我尝试按什么排序,都不会改变……对不起,我应该提到我尝试了你的第一个建议,但它不起作用。你的第二个建议也是如此。这两个问题的解决方案是我在寻找解决方案时找到的,但无论我尝试按什么排序,都不会改变。。。