如何用新值更新 MongoDB 中的许多文档

问题描述 投票:0回答:1

我有一些这样的文件:

{"title": "test1", sort: 1},
{"title": "test2", sort: 7},
{"title": "test3", sort: 5}

现在我想通过类似

previous value plus 10

的模式重新分配新值的排序字段值

我想要以下结果:

{"title": "test1", sort: 1},
{"title": "test2", sort: 21},
{"title": "test3", sort: 11}

对于很多文档,执行此操作的最佳方法和最佳性能是什么?

mongodb mongoose
1个回答
0
投票
  1. 使用

    $rank
    $setWindowFields
    功能提供排名1、2、3等,这将基于现有的
    sort
    值。

  2. 最终的新排序将是

    (rank - 1) x 10 + 1

db.collection.aggregate([
  {
    $setWindowFields: {
      sortBy: { sort: 1 },
      "output": {
        sort: { $rank: {} }
      }
    }
  },
  {
    $set: {
      sort: {
        $add: [
          1,
          {
            $multiply: [
              { $subtract: ["$sort", 1] },
              10
            ]
          }
        ]
      }
    }
  }
])

蒙戈游乐场

备注:

  • 最低排名是
    1
    ,因此这将是
    sort
    的第一个新值。
  • 如果您现有的
    sort
    字段可以有多个具有相同值的文档,那么当存在平局时,某些排名将会跳过。如果您希望它们始终是连续的,请使用
    $denseRank
    而不是
    $rank
© www.soinside.com 2019 - 2024. All rights reserved.