Как обновить профиль пользователя, у которого есть свойство, являющееся ссылкой в ​​MongooseJS?

У меня есть схема пользователя, которая ссылается на схему профиля.

      const UserSchema = new Schema(
  {
    _id: mongoose.Schema.Types.ObjectId,
    email: {
     ....email props...
    },
    password: {
     ...password props...
    },
    profile: [{
      type: mongoose.Schema.Types.ObjectId,
      ref: "Profile",
    }],
  },
);

 const Profile = new Schema({
  _user: {
    type: Schema.Types.ObjectId, ref: 'User'
  },
  'displayName': {
    type: String,
    default: ''
  },
  'interestedActivities': ['Ping-pong'], <---- This bad boy/girl is an array
  'memberSince': { type: Date, default: Date.now }
}
)

Я хотел бы создать маршрут, который может обновлять свойства пользователя и свойства профиля за один раз — с оговоркой, что одно из свойств модели профиля — это массив!!!

Я пробовал это....

        handler
  .use(auth)
  .put((req, res, next) => {
    emailValidator(req, res, next, 'email');
  },
    async (req, res, next) => {
      await connectDB()

      const {
        profileDisplayName,
        profileEmail,
        interestedActivities } = req.body;

      const update = {
        email: profileEmail,
        'profile.$.displayName': profileDisplayName,
        'profile.$.interestedActivities': interestedActivities
      }

      const filter = { _id: req.user.id };

      const updatedUser = await User.findOneAndUpdate(filter, update, { new: true })

      try {
        console.log("updatedUser ", updatedUser);
        if (updatedUser) {
          return res.status(200).send({
            updatedUser,
            msg: `You have updated your profile, good job!`
          });
        }

      } catch (error) {
        errorHandler(error, res)
      }

    })


export default handler;

Мой ответ:

        Status Code: 500 Internal Server Error


Cast to ObjectId failed for value "[
  {
    id: 'ae925393-0935-45da-93cb-7db509aedf20',
    name: 'interestedActivities',
    value: []
  }
]" (type Array) at path "profile.$"

Кто-нибудь знает, как я могу позволить себе свойство, которое является массивом?

Заранее спасибо!

0 ответов

Другие вопросы по тегам