Как я могу только принудительно обновить некоторые поля, если вложенный объектный ключ соответствует данным в базе данных? - PullRequest
0 голосов
/ 14 января 2019

Ниже приведена структура моих данных:

(stored in the database already)
{
    "_id" : ObjectId("5c3b917eff444cbc400a9939"),
    "data" : [ 
        {
            "role" : [ 
                "CARRY", 
                "CARRY", 
                "CARRY"
            ],
            "kills" : [ 
                "12", 
                "9", 
                "6"
            ],
            "_id" : ObjectId("5c3b917eff444cbc400a9955"),
            "name" : "Lisa",
            "rank" : "DIAMOND",
            "id" : 429,
            "count" : 3
},
{
    "_id" : ObjectId("5c3b917eff444cbc40042339"),
    "data" : [ 
        {
            "role" : [ 
                "CARRY", 
                "CARRY", 
                "CARRY"
            ],
            "kills" : [ 
                "5", 
                "2", 
                "1"
            ],
            "_id" : ObjectId("5c3b917eff444cbc400a9955"),
            "name" : "Joe",
            "rank" : "DIAMOND",
            "id" : 12,
            "count" : 3
},
...

Теперь предположим, что у меня есть больше данных для обновления, одна информация Лизы, другая информация нового человека:

(new data that I have)
{
    "_id" : ObjectId("5c3b917eff444cbc400a9939"),
    "data" : [ 
        {
            "role" : [ 
                "SUPPORT", 
                "SUPPORT", 
                "SUPPORT"
            ],
            "kills" : [ 
                "0", 
                "1", 
                "3"
            ],
            "_id" : ObjectId("5c3b917eff444cbc400a9955"),
            "name" : "Lisa",
            "rank" : "DIAMOND",
            "id" : 429,
            "count" : 3
},
{
    "_id" : ObjectId("5c3b917eff444cbc40042339"),
    "data" : [ 
        {
            "role" : [ 
                "CARRY", 
                "CARRY", 
                "CARRY"
            ],
            "kills" : [ 
                "1", 
                "7", 
                "5"
            ],
            "_id" : ObjectId("5c3b917eff444cbc400a9955"),
            "name" : "James",
            "rank" : "DIAMOND",
            "id" : 32,
            "count" : 3
}

Я хотел только вставить новую роль Лизы и массив убийств в существующий массив ролей и убийств Лизы, а затем вставить новую запись для Джеймса.

Я попытался сделать следующее, где data.data состоит из записи для Джеймса и новой информации для Лизы. (2 объектных массива), поэтому я делаю цикл for ..

            for(let i=0;i<data.data.length;i++){
              ChampionData.findOne({"data.id":data.data[i].id},{"data.$":1},function(err,res){
               if(!res){
                 console.log('no match!')
               }else if(res.length!==0){
                 console.log('match found:')
                 console.log(res.data)
               }
             })
            }

Любая помощь будет высоко ценится!

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