鉴于下面的数据结构(基于我的模型),我将如何通过cars.year按照使用mongoose的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 ...)
有没有更好或更有效的方法来做这件事?
提前感谢您的帮助。
答案 0 :(得分:1)
您正在寻找的是按数组中的字段排序时的标准行为。
MyModel.find().sort('-cars.year').exec(function(err, docs) {...});
这将使用每个文档中year
元素中cars
的最大值对文档进行降序排序。
按升序排序时,使用最小值。