$ []是否不更新所有数组元素?

时间:2018-12-24 20:24:51

标签: mongodb mongodb-query

每个人我都是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();

2 个答案:

答案 0 :(得分:1)

您必须在此处和{

  

位置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来获取不包含值的数组。