每个人我都是MongoDB的初学者。我必须在一定条件下进行更新,例如,对于所有文档,除了grades数组中值为100的文档之外,所有文档的grades数组中的所有元素都增加10。有人知道如何解决这个问题吗?我有类似的收藏
/* 1 */
{
"_id" : ObjectId("5c21f8cf410eff09884860b1"),
"name" : "vignesh",
"grades" : [
85,
82,
80
]
}
/* 2 */
{
"_id" : ObjectId("5c21f8e9410eff09884860b5"),
"name" : "vinoth",
"grades" : [
88,
90,
92
]
}
/* 3 */
{
"_id" : ObjectId("5c21f903410eff09884860bf"),
"name" : "waseem",
"grades" : [
85,
100,
90
]
}
这是我的代码:
async function doarrayupdate(){
const result=await GradeDetails.update({grades:{$ne:100}},{
$inc:{
"grades.$[]":10
}
},{multi:true});
console.log(result._doc);
}
doarrayupdate();
答案 0 :(得分:1)
您必须在此处和{3>
位置
arrayFilters
运算符,它充当所有位置的占位符 符合条件的数组字段中的元素 arrayFilters。
db.getCollection('test').update(
{ },
{ "$inc": { "grades.$[element]" : 10 } },
{ "multi": true,
"arrayFilters": [ { "element": { "$ne": 100 } } ]
}
)
答案 1 :(得分:0)
您可以尝试这样的事情
GradeDetails.update({grades:{$nin:[100]}},{
$inc:{
"grades.$[]":10
}
},{multi:true});
您必须使用$nin来获取不包含值的数组。