Обновите значение внутри массива в объекте, используя mongoose - PullRequest
0 голосов
/ 20 сентября 2018

Привет! Я хочу изменить статус как 'N' для изображений, которые я выбрал

Ниже приведен мой json:

 {
        "_id" : ObjectId("5b9f95c2e7d46ca2bffb8a38"),
        "inspection_id" : "00000000dc174c30682f9bdd",
        "__v" : 0,
        "client_id" : "00000000d080d32e387121bf",
        "created_date" : ISODate("2018-09-17T12:44:01.843Z"),
        "images" : [ 
            {
                "img_name" : "1537185218432-dnIyQ1tL4di9jBmP.png",
                "type" : "png",
                "file_size" : "6985",
                "path" : "/uploads/inspection/00000000d080d32e387121bf/images/1537185218432-dnIyQ1tL4di9jBmP.png",
                "status" : "Y",
                "_id" : ObjectId("5b9f95c23c4a081a34b4cf1a")
            }, 
            {
                "img_name" : "1537185451994-FS2yNFcNKhASSHqe.jpg",
                "type" : "jpg",
                "file_size" : "41341",
                "path" : "/uploads/inspection/00000000d080d32e387121bf/images/1537185451994-FS2yNFcNKhASSHqe.jpg",
                "status" : "Y",
                "_id" : ObjectId("5b9f96ac5700fc07000ee07f")
            }, 
            {
                "img_name" : "1537186207337-hhz5XrpmH48YW47A.jpg",
                "type" : "jpg",
                "file_size" : "41341",
                "path" : "/uploads/inspection/00000000d080d32e387121bf/images/1537186207337-hhz5XrpmH48YW47A.jpg",
                "status" : "N",
                "_id" : ObjectId("5b9f999f5700fc07000ee081")
            }]
    }

Я пробовал следующий запрос:

mongo.inspectionmedia.update({'images._id' : {$in:media_id} }, { $set : { 'images.$.status' : 'N'} },{multi: true},function(err,output){
            if(err){
                console.log(err)
                res.json("err");
            }
            else{
                res.json("ok");  
            }
        });

В media_id у меня есть массив идентификаторов для этих идентификаторов, только статус должен измениться.

Моя проблема в том, что значение обновляется, но для первого значения в массиве не для всех

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

MongoDB ввел отфильтрованный позиционный оператор $ [], который можно использовать для обновления нескольких элементов массива, которые соответствуют условию фильтра массива.Подробнее об этом операторе можно прочитать здесь:

https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/

      db.inspectionmedia.update(
        {$set: { 'images.$[element].status' : 'N'} },
        {multi:true,
         arrayFilters: [
           {'element._id': { $in:media_id}}
         ]
        },
        function(err,updated){
           console.log(updated);
       });
0 голосов
/ 20 сентября 2018

Звучит так, как будто вы хотите использовать arrayFilters :

db.inspectionmedia.update({}, {
    $set : { 'images.$[i].status' : 'N'} 
}, {
    multi: true,
    arrayFilters: [
        {'i._id': { $in:media_id}}
    ]
}, function(err,output){
    if(err){
        console.log(err)
        res.json("err");
    }
    else{
        res.json("ok");  
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...