MongoDB的findOneAndUpdate删除数据,而不考虑在预挂钩上设置的$

MongoDB的findOneAndUpdate删除数据,而不考虑在预挂钩上设置的$,mongodb,mongoose,nestjs,Mongodb,Mongoose,Nestjs,mongodb中的文档如下所示 [{ _id: "x8", company: { name: "ms", number: 123, }, position: "12.12" }] 我用nestjs的mongoose前钩子更新了这个 schema.pre('findOneAndUpdate', function () { this.set({

mongodb中的文档如下所示

[{
    _id: "x8",
    company: {
        name: "ms",
        number: 123,
    },
    position: "12.12"
}]
我用nestjs的mongoose前钩子更新了这个

  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中使用这个.set()。这个问题有什么解决办法吗?感谢您阅读此文章。

请更改您的钩子,当前它更新整个公司对象,因为您已为公司字段指定了新值。您只需要更新company对象的键,而不是为complete字段指定新值

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

Pushpendra Singh我怎样才能在预钩内完成整个区域?