通过在同一文档中原子地`$push`ing等于其他字段的元素数'值来更新文档的数组字段

91zkwejq  于 2021-09-23  发布在  Java
关注(0)|答案(0)|浏览(132)

我的文件结构如下:-

{ _id : "60ffa03fe124375b21cf5bf1",
  nextLength : 4,
  arr : [0,0,0,0,0,0]
}

这个 nextLength 字段表示应推送到指定位置的元素数 arr 下一个字段中的字段 $pusharr 领域每次 arr 场地被推倒了 nextLenght 现场将是 $inc 通过 1 . 所以在接下来的 $pusharr 场地应该推挤 4 进入 arr 场与 nextLength 应该增加到5。
更新后的预期结果

{ _id : "60ffa03fe124375b21cf5bf1",
  nextLength : 5,
  arr : [0,0,0,0,0,0,0,0,0,0] }

为什么它应该是原子的
此文档将经常更新,读取和更新操作应同时执行,并使用一个查询,因为每次执行更新时,我都将旧文档的下一个长度值存储在另一个集合中。
到目前为止,我的工作是使用mongodb聚合管道。

const resultBeforeUpdate= await TestModel.collection.findOneAndUpdate(
    {
      _id: "60ffa03fe124375b21cf5bf1",
    },
    [
      {
        $set: {
          arr: {
            $concatArrays: [
              "$arr",
              {
                $function: {
                  body: function (nextLenght) {
                    return new Array(nextLength).fill(0);
                  },
                  args: ["$$this.nextLength"],
                  lang: "js",
                },
              },
            ],
          },
        },
      },
      {
        $set: {
          nextLength: {
            $function: {
              body: function (previousLength) {
                return previousLength + 1;
              },
              args: ["$$this.nextLenght"],
              lang: "js",
            },
          },
        },
      },
    ],
    { new: false,}
  );

我的代码失败,出现以下错误

uncaught exception: Error: findAndModifyFailed failed: {
        "ok" : 0,
        "errmsg" : "Invalid $set :: caused by :: Use of undefined variable: this",
        "code" : 17276,
        "codeName" : "Location17276"
}

我是mongodb的新手。我相信会有另一种方法来实现这一目标。提前感谢您抽出时间。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题