mongoose 如何获取中间文件?

hs1rzwqc  于 2023-04-21  发布在  Go
关注(0)|答案(1)|浏览(82)

如何在mongoose中获取中间文档?
集合架构:

{
  _id: string,
  points: number
}

我想按点排序,然后按_id匹配,最终结果以matched _id为中心,抓取前50个和后50个。还包括基于排序的索引,这很好,但不是必需的。

lfapxunr

lfapxunr1#

mongodb版本5.0之后的一个选项是使用$setWindowFields

db.collection.aggregate([
  {$setWindowFields: {
      sortBy: {points: -1},
      output: {
        neighbors: {
          $push: "$$ROOT",
          window: {documents: [-N, N]}
        }
      }
  }},
  {$match: {_id: _id}},
  {$project: {neighbors: 1, _id: 0}},
  {$unwind: {path: "$neighbors", includeArrayIndex: "index"}},
  {$project: {
      _id: "$neighbors._id",
      points: "$neighbors.points",
      index: 1
  }}
])

了解它在playground example上的工作原理

  • 如果文档很重,或者N是一个很大的数字,则可以只推送_id,然后在$match之后使用$lookup

相关问题