我知道如何更新数组中的对象,如下所示:
db.bar.update( {user_id : 123456 , "items.item_name" : "my_item_two" } ,
{$inc : {"items.$.price" : 1} } ,
false ,
true);
但是,我试图当前更新一个对象。
模型:
boats: {
cash: {type: Number, default: 0},
amount: { type: Number, default: 0}
},
murder: {
attempts: {type: Number, default:0},
failed_attempts: {type: Number, default:0},
successfull_attempts: {type: Number, default:0},
cash: {type: Number, default: 0},
amount: { type: Number, default: 0}
},
orgcrime: {
cash: {type: Number, default: 0},
amount: { type: Number, default: 0}
},
我有一个名为type
的变量,其中包含我要更新的单词,例如:谋杀。我还有一个名为num
的变量,它将更新为值。
CurrentStats
包含完整的模型结果。
我得到类型s object by doing:
currentStats [type]`,但我该如何更新呢?
我试过:
var x = {};
x[type].cash = num;
x[type].amount = 1;
和{$inc: x}
,但那不起作用。
我该怎么做?
答案 0 :(得分:1)
您的意思是使用"Dot Notation"实际形成字段名称,方法是连接密钥的名称:
var type = "murder";
var x = { };
x[type + ".cash"] = 1;
x[type + ".amount"] = 2;
db.bar.update({},{ "$inc": x });
现代ES6符号还允许其他形式,如:
db.bar.update(
{},
{
"$inc": {
[type + ".cash"]: 1,
[`${type}.amount`]: 2
}
}
);
无论哪种形式
{
"$inc": {
"murder.cash": 1,
"murder.amount": 2
}
}
在更改文档时,您希望更新这些属性,仅这些属性。