Вставить данные с динамическим именем поля

Я просто пытаюсь сделать что-то простое с Mongo, но это не работает:

Я хочу сохранить данные в объект, как: module.xxx.yyy Затем я попробовал много вещей, таких как:

UsersRights.upsert({
 condoId: condoId,
 userId: manager._id,
}, {
 condoId: condoId,
 userId: manager._id,
 module: {
  [defaultRight.xxx] : {
   [defaultRight.yyy] : defaultRight.default
  }
 }
});

но когда я хочу добавить новый xxx или новый yyy стереть и заменить весь module объект, а не только добавить новый ключ.

Я также попробовал это:

UsersRights.upsert({
 condoId: condoId,
 userId: manager._id,
}, {
 condoId: condoId,
 userId: manager._id,
 ["module." + defaultRight.module + "." + defaultRight.right] : defaultRight.default,
});

но сервер покажет мне ошибку вроде: MinimongoError: Key module.xxx.yyy must not contain '.'

1 ответ

Решение

Вам необходимо использовать следующую форму:

YourCollection.upsert({
    _id: id, (can be other selectors as well)
}, {
    $set: setter
});

Сеттер - это объект, который вы создали ранее и должен иметь следующую форму:

const setter = {};
setter[`${#1Level}.${#2Level}`] = data;

куда #1Level & #2Level являются переменными, называющими поля, которые вы хотите изменить или добавить.

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