• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    해결됨

updateMany에서 user._id를 못찾는 상황

23.10.28 04:02 작성 조회수 194

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로 해서 생긴 문제.....

 

아이고 고생하셨습니다! 개발자를 귀찮게 하는 흔한 실수이죠..! ㅎㅎ