Как обновить документ mongodb несколькими динамическими ключами? - PullRequest
0 голосов
/ 06 мая 2018

Сервер получает три динамических параметра: карта, раздел, подраздел.

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

Модель пользователя:

{
  _id: some_id,
  skills: {
    [map_id]: {
      [section_id]: { 
        [subsection_id]: {
          ...new_data
        }
      }
    },
    ...other mapKeys
  }
}

Сейчас я использую:

userScheme.findById(userId, function(userErr, user) {
  const body = req.body,
        map_id = body.map,
        section_id = body.section,
        subsection_id = body.subsection,
        new_data = body.data;

  let skills = {};
  let createNestedObject = function( base, names ) {
      for( var i = 0; i < names.length; i++ ) {
         base = base[ names[i] ] = base[ names[i] ] || {};
      }
  };

  createNestedObject( skills, [map, section, subsection] );
  skills[map_id][section_id][subsection_id] = new_data;

  user.skills = skills;
  user.save();
});

Но он перезаписывает данные, полученные ранее: (

1 Ответ

0 голосов
/ 07 мая 2018

Я использовал Model.update (метод мангуст):

const link = `skills.${map_id}.${section_id}.${subsection_id}`;
userModel.update({_id: userId }, { $set: { [link]: subsection } }, { upsert: true }, function(userErr, user) {});

Работает правильно!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...