使用动态字段名称更新数据
Upsert data with a dynamic field name
我只是尝试用 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 '.'
您需要使用以下表格:
YourCollection.upsert({
_id: id, (can be other selectors as well)
}, {
$set: setter
});
Setter 是您之前创建的对象,应具有以下形式:
const setter = {};
setter[`${#1Level}.${#2Level}`] = data;
其中 #1Level
和 #2Level
是命名您要修改或添加的字段的变量。
我只是尝试用 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 '.'
您需要使用以下表格:
YourCollection.upsert({
_id: id, (can be other selectors as well)
}, {
$set: setter
});
Setter 是您之前创建的对象,应具有以下形式:
const setter = {};
setter[`${#1Level}.${#2Level}`] = data;
其中 #1Level
和 #2Level
是命名您要修改或添加的字段的变量。