Actualizar um valor dentro matriz num objecto usando mangusta

votos
0

Oi eu quero mudar um status como 'N' para as imagens que eu selecionei

A seguir é a minha 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)
            }]
    }

Eu tentei este seguinte consulta:

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);  
            }
        });

Em id_da_mídia estou tendo variedade de id para aqueles id estado só tem que mudar.

Meu problema é valor é atualizar mas para o primeiro valor na matriz não para todos

Publicado 20/09/2018 em 04:34
fonte usuário
Em outras línguas...                            


2 respostas

votos
1

MongoDB introduziu o operador filtrada $ posicional [], que pode ser usado para actualizar vários elementos de uma matriz, que corresponde a uma condição de filtro matriz. Você pode ler mais sobre este operador aqui:

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);
       });
Respondeu 20/09/2018 em 05:23
fonte usuário

votos
1

Isso soa como você gostaria de usar 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");  
    }
});
Respondeu 20/09/2018 em 05:00
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more