当mongoDb中的另一个模型字段发生变化时,我如何更新模型字段

fumotvh3  于 2023-04-11  发布在  Go
关注(0)|答案(1)|浏览(186)

我尝试在userSchema用户名更改时更新postSchema用户名

//This is the PostSchema

const mongoose = require("mongoose");

const PostSchema = new mongoose.Schema(
  {
    username: {
      type: String,
      required: true,
      unique: false,
    },
    profileDp: {
      type: String,
      required: true,
    },
})
//This is the user Schema

const UserSchema = new mongoose.Schema(
  {
    _id: {
      type: String,
      required: true,
    },
    username: {
      type: String,
      required: true,
      unique: false,
    },
    profilePic: {
      type: String,
      required: true,
    },

那么,我如何在postSchema中创建一个关系,以便每当userSchema用户名更改时,postSchema用户名也应该更改?
到目前为止,我已经看到$set,ref甚至populate()被推荐,但我仍然不确定如何做到这一点。

ldioqlga

ldioqlga1#

您可以在UserSchema上添加pre-hooks,同时更新用户名,如下所示。

UserSchema.pre(["updateOne", "findOneAndUpdate", "findByIdAndUpdate", "updateMany" ], async function (next) {
    if(this.get("username")){
         let userDoc = await mongoose.model("user").findOne(this._conditions);
         await mongoose.model("post").updateOne({ username: userDoc.username },{
         username: this.get("username")
         });
    }
    next();
  }))

检查上面的例子,每当您的用户名更新,它将自动更新后的文件有关pre-hooks的更多说明访问此链接https://mongoosejs.com/docs/middleware.html

相关问题