【问题标题】:How to get entire list of nested inner list groups, and add sort & limit to them. MongoDB query如何获取嵌套内部列表组的整个列表,并为它们添加排序和限制。 MongoDB查询
【发布时间】:2021-01-05 14:31:16
【问题描述】:

我在 MongoDB 集合中有一个名为 EvaluationsGroup 的对象的以下模型:

{
    "_id" : "5fecfb83d61ae459df1bceda",
    "Status" : "noDataFound",
    "Evaluations" : [ 
        {
            "EvaluatedAt" : ISODate("2020-12-30T22:13:21.168Z"),
            "ReferenceValue" : 2.0
        }
        {
            "EvaluatedAt" : ISODate("2020-12-30T22:13:15.168Z"),
            "ReferenceValue" : 3.0,
             (... several other properties)
        }
    ]
}

我想要做的是获取所有“EvaluationsGroups”的所有内部Evaluations 的完整列表,按EvaluatedAt 日期对它们进行排序,并限制分页结果。

如何在 mongo 中进行这样的查询?

【问题讨论】:

    标签: arrays mongodb sorting mongodb-query limit


    【解决方案1】:
    • $project 显示必填字段
    • $unwind解构Evaluations数组
    • $replaceRoot 替换根目录下的对象
    • $sortEvaluatedAt 日期降序排列
    • $skip分页文档数
    • $limit 文档数
    let page = 0;
    let limit = 10;
    let skip = page*limit;
    db.collection.aggregate([
      {
        $project: {
          _id: 0,
          Evaluations: 1
        }
      },
      { $unwind: "$Evaluations" },
      { $replaceRoot: { newRoot: "$Evaluations" } },
      { $sort: { EvaluatedAt: -1 } },
      { $skip: skip },
      { $limit: limit }
    ])
    

    Playground

    【讨论】:

      【解决方案2】:

      你可以在mongodb中使用$unwind属性

      db.getCollection('test').aggregate( [ 
          { $unwind : "$Evaluations" },
          { $sort: { "Evaluations.EvaluatedAt": 1 } },
          { $limit: 10 }
      ] )
      

      上面的代码有 3 个阶段的流水线

      • 第 1 阶段:将数组展开为单个对象 - $unwind

      • 第 2 阶段:根据 Evaluations.EvaluatedAt 属性对数组进行排序 - $sort

      • 第 3 阶段:设置限制范围 - $limit

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-10
        • 1970-01-01
        • 1970-01-01
        • 2012-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多