작성자 없음
작성자 정보가 삭제된 글입니다.
해결된 질문
작성
·
295
1
강좌대로
Blog.updateMany({ "user._id": userId }, { "user.name": name })
로 하니 블로그 데이터 유저 정보가 변경이 계속 안되고 있습니다 ㅠㅠ
유저 데이터는 정상적으로 변경이 되었는데요 문제점을 모르겠습니다.
해당 코드 깃허브 : https://github.com/alinfanclub/KimDevlogServer/blob/updateMany/src/routes/userRouter.js
userRouter.put("/:userId", async (req, res) => {
try {
const { userId } = req.params;
if (!mongoose.isValidObjectId(userId))
return res.status(400).send({ err: "invalid userId" });
const { age, name } = req.body;
if (!age && !name)
return res.status(400).send({ err: "age or name is required" });
if (age && typeof age !== "number")
return res.status(400).send({ err: "age must be a number" });
if (name && typeof name.first !== "string" && typeof name.last !== "string")
return res.status(400).send({ err: "first and last name are strings" });
// let updateBody = {};
// if(age) updateBody.age = age;
// if(name) updateBody.name = name;
// const user = await User.findByIdAndUpdate(userId, updateBody, { new: true });
let user = await User.findById(userId);
if (age) user.age = age;
if (name) {
user.name = name;
await Blog.updateMany({ "user._id": userId }, { "user.name": name });
}
await user.save();
return res.send({ user });
} catch (err) {
console.log(err);
return res.status(500).send({ err: err.message });
}
});
답변 1
0
해결
const BlogSchema = new Schema(
{
title: { type: String, required: true },
content: { type: String, required: true },
islive: { type: Boolean, required: true, default: false },
user: {
_id: { type: Object, required: true, ref: "user" },
username: { type: String, required: true },
name: {
first: { type: String, required: true },
last: { type: String, required: true },
},
},
comments: [commentSchema],
},
{ timestamps: true }
);
=>
const BlogSchema2 = new Schema(
{
title: { type: String, required: true },
content: { type: String, required: true },
islive: { type: Boolean, required: true, default: false },
user: {
_id: { type: Types.ObjectId, required: true, ref: "user" },
username: { type: String, required: true },
name: {
first: { type: String, required: true },
last: { type: String, required: true },
},
},
commentsCount: { type: Number, default: 0, required: true },
comments: [commentSchema],
},
{ timestamps: true }
);
바보같이 user type을 object로 해서 생긴 문제.....
아이고 고생하셨습니다! 개발자를 귀찮게 하는 흔한 실수이죠..! ㅎㅎ