我正在尝试对嵌套的子文档进行排序和限制,在查找并尝试了不同的解决方案后,我只是想不通。
系统
const systemSchema = mongoose.Schema({
data: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Data'
}],
...other
})
数据
const dataSchema = mongoose.Schema({
measurements: [measurementSchema]
...other
})
测量
const measurementSchema = mongoose.Schema({
date: {
type: Date,
required: true
},
...other
}, { _id : true })
从上面可以看出; 1个系统->数据数组->测量数组
我想按日期和限制订购测量值。
我尝试过的事情
我尝试的第一件事就是使用填充选项,例如:
return System
.find({ _id: { $in: systemIds } })
.populate({
path: 'data',
populate: {
path: 'measurements',
options: {
sort: { date: 1 }, // <-- doesn't work
limit: 5 // <-- does work
}
}
})
这样尝试确实会限制测量数组,但不会对其排序。
在那之后,我尝试使用聚合,并尝试了很多代码,但没有一个起作用,所以我将其遗漏了。
使用mongoDB 3.4.7
样本数据
{
"systems": [
{
"data": [
{
"_id": "5c0d87f77f93b06476be9cfd",
"measurements": [
{
"_id": "5c0d894178fc6c64cd36ffeb",
"value": "17",
"date": "2018-12-09T21:29:37.662Z"
}
{
"_id": "5c0d8952e418d464d6268bfc",
"value": "23",
"date": "2018-12-09T21:29:54.354Z"
},
{
"_id": "5c0d894b78fc6c64cd36fffb",
"value": "34",
"date": "2018-12-09T21:29:47.770Z"
},
{
"_id": "5c0d89503de6d564d2d32385",
"value": "19",
"date": "2018-12-09T21:29:52.293Z"
},
{
"_id": "5c0d894678fc6c64cd36fff3",
"value": "16",
"date": "2018-12-09T21:29:42.766Z"
},
]
}
],
"_id": "5c0d87f77f93b06476be9d01"
}
]
}
答案 0 :(得分:0)
填充和排序一直是mongoose
的问题:
Issue 1-填充排序效果不佳
Issue 2-在子文档中填充路径期间进行排序...
使用$lookup
进行聚合并通过$project
作为一个example can be seen here进行排序可能会更好