Как обновить несколько значений во вложенных документах? - PullRequest
1 голос
/ 10 июля 2019

Я совершенно новичок в MongoDB. У меня есть документ профиля, и каждый профиль содержит документ о языках.

{ 
    "_id" : ObjectId("5d23134bbd43c3208034f86f"), 
    "name" : "name1", 
    "languages" : 
        [ 
            { 
                "_id" : ObjectId("5d26321e920fba2c147dec73"), 
                "language" : "English", 
                "proficiency" : "elem" 
            }, 
            { 
                "_id" : ObjectId("5d2632a5920fba2c147dec74"), 
                "language" : "Italian", 
                "proficiency" : "prof" 
            }
        ], 
    "status" : "ACTIVE"
},
{ 
    "_id" : ObjectId("5d231352bd43c3208034f870"), 
    "name" : "name2", 
    "languages" : 
        [ 
            { 
                "_id" : ObjectId("5d26321e920fba2c147dec75"), 
                "language" : "Russian", 
                "proficiency" : "elem" 
            }, 
            { 
                "_id" : ObjectId("5d2632a5920fba2c147dec76"), 
                "language" : "Ukranian", 
                "proficiency" : "inter" 
            }
        ], 
    "status" : "ARCHIVED"
} 

Я хотел бы обновить все навыки в документе профилей (elem -> элементарный, inter -> промежуточный, prof -> proficient). Любая помощь?

1 Ответ

2 голосов
/ 10 июля 2019

Вам нужно $ оператор позиционной фильтрации

db.col.updateMany({}, 
    { 
        $set: { 
            "languages.$[elem].proficiency": "elementary",
            "languages.$[inter].proficiency": "intermediate",
            "languages.$[prof].proficiency": "proficient",
        } 
    },
    {
        arrayFilters: [
            { "elem.proficiency": "elem" },
            { "inter.proficiency": "inter" },
            { "prof.proficiency": "prof" },
        ]
    })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...