javascript - 使用 Mongoose.js 按嵌套数组中的字段排序

标签 javascript arrays node.js mongodb mongoose

鉴于下面的数据结构(基于我的模型),我将如何使用 mongoose 按 cars.year 按 desc 顺序对集合进行排序?因此,首先我在汽车数组中找到最大年份,然后按它对集合进行排序。

{ "_id" : 1234,
  "dealershipName": "Eric’s Mongo Cars",
  "cars": [
           {"year": 2013,
            "make": "10gen",
            "model": "MongoCar",},
           {"year": 1985,
            "make": "DeLorean",
            "model": "DMC-12",}
  ]
},
{ "_id" : 1235,
  "dealershipName": "Eric’s Mongo Cars",
  "cars": [
           {"year": 2015,
            "make": "10gen",
            "model": "MongoCar",},
           {"year": 12001,
            "make": "DeLorean",
            "model": "DMC-12",}
  ]
}

我尝试使用聚合函数进行类似的操作,但是 $unwind 为 cars 数组中的每个元素复制了我的结果。

MyModel
    .aggregate([{
        $unwind: "$cars"
    }, {
        $project: {
            ...
            year: '$cars.year',
        }
    }, {
        $sort: {
            year: -1
        }
    }])
    .exec(function ...)

是否有更好或更有效的方法来执行此操作?

预先感谢您的帮助。

最佳答案

您正在寻找的是按数组中的字段排序时的标准行为。

MyModel.find().sort('-cars.year').exec(function(err, docs) {...});

这将使用每个文档的 cars 元素中 year 的最大值对文档进行降序排序。

升序排序时,取最小值。

关于javascript - 使用 Mongoose.js 按嵌套数组中的字段排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27993410/

相关文章:

c++ - 将 operator new(sizeof(T) * N) 返回的内存视为数组

python - 将混合数据转换为字符串 numpy

node.js - 如何避免在 ReactJS 同构应用程序的服务器上出现错误 'localStorage is not defined'?

javascript - Express:为什么这个GET请求执行了两次?

javascript - 二维数组的嵌套映射 : I need the index of my outer arrays

javascript - 脚本延迟在 IE11 上不起作用

javascript - jquery show() 在 IE 7 中移动其他元素

javascript - 在 NaCl 中保存持久文件并读取应用程序 JavaScript 代码

mysql - 如何使用VueJS将数据从modal传递到MYSQL

javascript - 从子窗口获取URL参数并加载父窗口