猫鼬限制和排序填充子文档

时间:2018-12-09 19:38:10

标签: mongodb mongoose

我正在尝试对嵌套的子文档进行排序和限制,在查找并尝试了不同的解决方案后,我只是想不通。

系统

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"
        }
    ]
}

1 个答案:

答案 0 :(得分:0)

填充和排序一直是mongoose的问题:

Issue 1-填充排序效果不佳

Issue 2-在子文档中填充路径期间进行排序...

使用$lookup进行聚合并通过$project作为一个example can be seen here进行排序可能会更好