如何使用Mongoose向现有MongoDB文档添加新字段?

zdwk9cvp  于 2023-02-15  发布在  Go
关注(0)|答案(2)|浏览(206)

我已经尝试了很多次向现有的MongoDB文档添加新字段,但是我失败了。我尝试了下面的代码来完成这项工作,但是什么也没有发生。
这是用户模型。

const UserSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
  },
  { timestamps: true }
);

下面是向文档添加新字段的代码。

const updateDocument = async () => {
  const updatedUser = await User.findOneAndUpdate(
    { _id: "63eb30f466127f7a0f7a9b32" },
    {
      $set: { lastName: "syed" },
    }
  );
  console.log(updatedUser);
};

updateDocument();

注1lastName字段在MongoDB文档和UserSchema中不存在。我想将该字段添加到MongoDB文档中。
注2:当我更新文档内的现有字段时,相同的代码有效,但在添加新字段时无效。

jm2pwxwz

jm2pwxwz1#

您需要将strict:false作为选项传递给findOneAndUpdate
据 Mongoose 医生说:
strict选项(默认情况下启用)确保传递给模型构造函数的值不会保存到数据库中,而这些值在模式中没有指定。

const updatedUser = await User.findOneAndUpdate(
  { _id: "63eb30f466127f7a0f7a9b32" },
  {
    $set: { lastName: "syed" },
  },
  { strict: false }
);

另一种方法是在定义架构时传递此参数:

const UserSchema = new mongoose.Schema(
  {
    name: {
      type: String,
      required: true,
    },
    email: {
      type: String,
      required: true,
      unique: true,
    },
    password: {
      type: String,
      required: true,
    },
  },
  { timestamps: true, strict: false }
);
hl0ma9xz

hl0ma9xz2#

谢谢你,穆斯塔法,成功了。

相关问题