如何将对象属性的值数组更新为新值 mongodb?



我有这样一个集合:

{
"name": "Citroen",
"additionals": [ "tires", "windows", "seats", "belts" ],
"price": [ { "poor": 15.00 }, { "mid": 21.00 }, { "exl": 30.00 } ]
}

,我想把verison例如mid的价格从21修改为23,我试了一下:

function mod(name, version, newprice){  

results = db.Cars.update({"name":name}, {$set: {"price.[0].$":newprice}});
return results;
}

mod("Citroen", "mid", 23)
你能告诉我我做错了什么吗?

您可以尝试使用$,$exists来检查属性是否存在于对象数组中,设置async/await用于更新查询,

async function mod(name, version, newprice){  
return await db.Cars.update(
{ 
"name": name,
["price."+version]: { $exists: true }
}, 
{ $set: { ["price.$."+version]: newprice } }
);
}
mod("Citroen", "mid", 23);

游乐场

因为你使用的是JS,你可以创建键对象,所以你可以使用这样的东西:

async function mod(name, version, newprice){ 
var setObj = {}
var setQuery = "price.$."+version
setObj[setQuery] = newprice
var findQuery = "price."+version
var findObj = {name:name}
findObj[findQuery]={$exists:true}

results = await db.Cars.update(findObj, {$set:setObj});
return results;
}
mod("Citroen", "mid", 23)

示例查询在这里如何工作

也不要忘记async/await

最新更新