使用 Mongoose.js 按嵌套数组中的字段排序
Posted
技术标签:
【中文标题】使用 Mongoose.js 按嵌套数组中的字段排序【英文标题】:Sort by field in nested array with Mongoose.js 【发布时间】:2015-03-15 14:46:39 【问题描述】:鉴于下面的数据结构(基于我的模型),我将如何使用 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
为汽车数组中的每个元素复制了我的结果。
MyModel
.aggregate([
$unwind: "$cars"
,
$project:
...
year: '$cars.year',
,
$sort:
year: -1
])
.exec(function ...)
有没有更好或更有效的方法来做到这一点?
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:您正在寻找的是按数组中的字段排序时的标准行为。
MyModel.find().sort('-cars.year').exec(function(err, docs) ...);
这将使用每个文档中cars
的元素中year
的最大值对文档进行降序排序。
升序排序时,使用最小值。
【讨论】:
@AryehArmon 有什么不适合你的?请记住,它对文档进行排序,而不是每个文档中的cars
数组。以上是关于使用 Mongoose.js 按嵌套数组中的字段排序的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 findOne 查询 mongodb 并排除数组中的一些嵌套字段