Вставить данные с динамическим именем поля
Я просто пытаюсь сделать что-то простое с 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
являются переменными, называющими поля, которые вы хотите изменить или добавить.