Обновить подобъект в массиве, который является объектом в основном массиве - mongoose - PullRequest
0 голосов
/ 15 марта 2019

У меня есть эта модель

Моя модель

var mySchema = new mongoose.Schema({  
        user_id: {type: Schema.Types.ObjectId, ref: 'users'},
        warranter: [{              
                 files:[{
                  "file":{type : [{path:String}], default:[]},
                   "docId": {type: Schema.Types.ObjectId, ref: 'documents'},
                   "typeDoc": Schema.Types.ObjectId,
                   status:{type: Number, default: 1},  
                       }]
                  }],
     }
    , {collection: 'my_files'});

Это пример данных

Пример

{
"_id" : ObjectId("5c87c445935cfe2dbc07501d"),
"user_id" : ObjectId("5c81070a4f8b271556902533"),
"warranter" : [ 
    {

        "files" : [ 
            {
                "file" : [ 
                    {
                        "path" : "5c81070a4f8b271556902533/documents/my_file.png",
                        "_id" : ObjectId("5c88e3766aed583e107c0120")
                    }
                ],
               "status" : 1,
                "docId" : ObjectId("5b85505680cf16043756ef83"),
                "typeDoc" : ObjectId("5bae100efe6bef36fbc1ae38"),

            },
             {
                "file" : [ 
                    {
                        "path" : "5c81070a4f8b271556902533/documents/my_file2.png",
                        "_id" : ObjectId("5c88e3766aed583e107c0121")
                    }
                ],
               "status" : 0,
                "docId" : ObjectId("5b85505680cf16043756ef83"),
                "typeDoc" : ObjectId("5bae100efe6bef36fbc1ae38"),

            }
       ],
        "_id" : ObjectId("5c87e088b2ba003da5a0d946")            
    }]
}

Я хочу обновить документ, который имеет статус: 1, и обновить его до 0 с моими параметрами: user_id, warranter._id, warranter.files. $. DocId, warranter.files. $. TypeDoc

Я пробовал этот запрос, но он не работал,

var req = { 'user_id': "5c81070a4f8b271556902533", 
            'warranter._id':"5c87e088b2ba003da5a0d946", 
            'cf_warranter.$.files': { $elemMatch: {docId: "5b85505680cf16043756ef83", 
    typeDoc:"5bae100efe6bef36fbc1ae38", 
    status:1} } }

var data = {"warranter.$.files.status": 0}

 my_files.update(req, {$set: data}, {
        runValidators: true, multi: true

    }, callback);
...