【问题标题】:Mongoose limit and sort for populated sub docs填充子文档的猫鼬限制和排序
【发布时间】:2018-12-11 02:58:02
【问题描述】:

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

系统

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

【问题讨论】:

  • 能否将您的 mongodb 版本更新到 3.6 或更高版本?

标签: mongodb mongoose


【解决方案1】:

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

Issue 1 - 在填充中排序不能正常工作

Issue 2 - 在子文档中填充路径时排序...

您最好使用$lookup 进行聚合并通过$project 排序为一个example can be seen here

【讨论】:

  • 感谢您与我一起思考。我认为我必须使用聚合,但我似乎无法弄清楚..
  • 将示例数据添加到您的帖子中,我或许可以帮助您。始终为 mongo 问题添加示例数据。让每个人的生活变得如此轻松和简单......当然不是你的:)
  • 我包含了一些示例数据! :)
猜你喜欢
  • 2016-08-17
  • 2019-09-16
  • 2017-05-07
  • 2021-02-11
  • 2021-10-07
  • 2019-05-31
  • 2015-10-01
  • 2015-07-28
  • 2015-11-27
相关资源
最近更新 更多