我有这样一个集合:
{
"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
。