【问题标题】:findOneAndUpdate of MongoDB delete data regardless of $set on pre hookMongoDB 的 findOneAndUpdate 删除数据,无论 $set on pre hook
【发布时间】:2021-04-12 18:02:31
【问题描述】:

mongodb中有如下文档。

[{
    _id: "x8",
    company: {
        name: "ms",
        number: 123,
    },
    position: "12.12"
}]

我使用 mongoose 的 pre hook 和 nestjs 更新了这个。

  schema.pre('findOneAndUpdate', function () {
      this.set({
          company: {name: "X3jfks"} // encrypt Field in pre hook.
      });
   });

还有一个 findOneAndUpdate 方法。

const updateData = {
    company: "xyz"
}

await this.model.findOneAndUpdate(
    {_id: "x8"},
    ...updateData
)

但文件的更改与我的意图不同,如下所示。
也就是说,company.number 消失了。

[{
    company: {
        name: "X3jfks",
    },
    position: "12.12"
}]

我需要这个结果。

[{
    company: {
        name: "X3jfks",
        number: 123,
    },
    position: "12.12"
}]

但结果与 $set 相同。

await this.model.findOneAndUpdate(
    {_id: "x8"},
    {$set: {...updateData}}
)

我必须在 pre hook 中使用 this.set()。这个问题有解决方案吗?感谢您阅读本文。

【问题讨论】:

    标签: mongodb mongoose nestjs


    【解决方案1】:

    请更改您的挂钩,目前它会更新整个公司对象,因为您已为公司字段分配了新值。您只需更新公司对象的键,而不是为完整字段分配新值。

    schema.pre('findOneAndUpdate', function () {
      this.set({
          "company.name":"X3jfks" // encrypt Field in pre hook.
      });
    });
    

    【讨论】:

    • Pushpendra Singh 如何在 pre-hook 内制作完整的字段?
    猜你喜欢
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    • 2021-07-20
    • 2018-12-28
    • 2018-02-22
    • 1970-01-01
    • 2015-10-27
    • 2018-12-30
    相关资源
    最近更新 更多