如何获取嵌套内部列表组的完整列表,并为它们添加排序和限制。 MongoDB 查询

How to get entire list of nested inner list groups, and add sort & limit to them. MongoDB query

我在 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 中进行这样的查询?

  • $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

您可以在mongodb

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

以上代码有 3 级流水线

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

• 阶段 2:根据 Evaluations.EvaluatedAt 属性 - $sort

对数组进行排序

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