使用动态字段名称插入数据

时间:2017-11-24 08:41:23

标签: javascript mongodb meteor minimongo

我只是尝试用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 个答案:

答案 0 :(得分:1)

您需要使用以下表格:

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

Setter是您之前创建的对象,应具有以下形式:

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

#1Level& #2Level是vars,用于命名要修改或添加的字段。