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

1

Я просто пытаюсь сделать что-то простое с 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 '.'

Теги:
meteor
minimongo

1 ответ

1
Лучший ответ

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

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

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню