$ [] не обновляет весь элемент массива? - PullRequest
0 голосов
/ 24 декабря 2018

Все, кто я новичок в MongoDB. Я должен обновить с определенным условием, например, Чтобы увеличить все элементы в массиве оценок на 10 для всех документов, кроме тех, которые имеют значение 100 в массиве оценок. Заранее спасибо ... МожетКто-нибудь знает, как решить эту проблему?У меня есть коллекции, такие как

/* 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 голосов
/ 25 декабря 2018

Вы должны использовать arrayFilters здесь и с

Позиционное $[<identifier>] оператор, который действует как заполнитель для всех элементов в поле массива, которые соответствуют условиям, указанным в arrayFilters.

db.getCollection('test').update(
   { },
   { "$inc": { "grades.$[element]" : 10 } },
   { "multi": true,
     "arrayFilters": [ { "element": { "$ne": 100 } } ]
   }
)
0 голосов
/ 25 декабря 2018

Вы можете попробовать что-то вроде этого

 GradeDetails.update({grades:{$nin:[100]}},{
    $inc:{
      "grades.$[]":10
    }
},{multi:true});

Вы должны использовать $ nin для получения массива, который не содержит значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...