簡體   English   中英

更新mongodb集合的問題

[英]problems to update mongodb collection

所以我的社交媒體應用程序有兩個不同的集合。 一份用於用戶,另一份用於用戶的帖子。 每當我從我的用戶集合中更新信息時,它也應該在帖子上修改它(因為我的帖子集合也包含來自用戶的數據),但它只在我之后創建的帖子上進行而不是在我以前一直在創建的那些。 我該如何解決?

用戶架構

const userSchema = new Schema({
    name: { type: String, required: true },
    lastname: { type: String, required: true },
    username: { type: String, required: true },
    email: { type: String, required: true },
    password: { type: String, required: true, minlength: 8 },
    avatar: { data: Buffer, contentType: String },
});

POST SCHEMA

const postSchema = new Schema({
   user: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
   name: { type: String, required: true },
   lastname: { type: String },
   username: { type: String },
   avatar: { data: Buffer, contentType: String },
   date: { type: Date, default: Date.now() },
   textOfThePost: { type: String, required: true },
});

編輯功能快遞/貓鼬

router.put("/edit_profile", async (req, res) => {
  try {
    const { name, lastname, username } = req.body;
    const user = await User.findById(req.user).select("-password");

     if (!user) return res.status(404).json("User doesn't exists");

     if (name) user.name = name;
     if (lastname) user.lastname = lastname;
     if (username) user.username = username;

     await user.save();
     res.json(user);
  } catch (err) {
     res.status(500).json({ error: err.message });
 }
 };

為此,您可以使用updateMany()

const res = await Post.updateMany({ user: user.id  }, { name: user.name, username: user.username /* ... */  });

但是,正如已經指出的那樣,您將多余的用戶數據存儲在 post 模型以及不必要的用戶模型上。 類似於 SQL 中的連接,您可以簡單地使用populate()並且不在您的帖子模型中存儲任何與用戶相關的數據。 這樣,每次您查詢帖子時,它都會根據其 ID 自動提取最新匹配的用戶模型。

myPost.populate('user')

請注意,因此ref是必需的,它告訴貓鼬如何填充用戶字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM