【问题标题】:Upsert data with a dynamic field name使用动态字段名称更新插入数据
【发布时间】:2023-03-23 15:48:01
【问题描述】:

我只是尝试用 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 '.'

【问题讨论】:

    标签: javascript mongodb meteor minimongo


    【解决方案1】:

    您需要使用以下表格:

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

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

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

    其中#1Level#2Level 是命名您要修改或添加的字段的变量。

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多