Как обновить несколько объектов, встроенных в массив для нескольких документов в MongoDB, используя язык запросов MongoDB? - PullRequest
0 голосов
/ 22 января 2020

У меня есть эти 2 документы в моей коллекции ' resources ' -

db.resources.insertMany([
{
Name: "Mark",
Gender: "M",
State: "VA",
TeamRoles: 
    [
     {
        Team: "A",
        Role: "Quality Advisor",
        Active: true
     },
     {
        Team: "B",
        Role: "Systems Analyst",
        Active: true
     }
     ]

},
{
Name: "Stacy",
Gender: "F",
State: "GA",
TeamRoles: 
    [
     {
        Team: "A",
        Role: "Systems Analyst",
        Active: true
     },
     {
        Team: "B",
        Role: "Developer",
        Active: true
     }
     ]
}])

Здесь я хочу обновить роль из систем * Analyst 'до' Business Analyst 'для всех соответствующих объектов в массиве TeamRoles для всех документов в коллекции ресурсов. Есть ли способ достичь этого, используя язык запросов Mon go DB (не JavaScript)?

1 Ответ

1 голос
/ 22 января 2020

Пожалуйста, попробуйте это:

db.collection.updateMany(
   {'TeamRoles.Role': "Systems Analyst"},
   { $set: { "TeamRoles.$[element].Role" : "Business Analyst" } },
   { arrayFilters: [ { "element.Role": "Systems Analyst" } ] }
)

Сбор данных:

/* 1 */
{
    "_id" : ObjectId("5e2776c7dc791f82e7e1736d"),
    "Name" : "Mark",
    "Gender" : "M",
    "State" : "VA",
    "TeamRoles" : [ 
        {
            "Team" : "A",
            "Role" : "Quality Advisor",
            "Active" : true
        }, 
        {
            "Team" : "B",
            "Role" : "Systems Analyst",
            "Active" : true
        }, 
        {
            "Team" : "C",
            "Role" : "Systems Analyst",
            "Active" : true
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5e2776c7dc791f82e7e1736e"),
    "Name" : "Stacy",
    "Gender" : "F",
    "State" : "GA",
    "TeamRoles" : [ 
        {
            "Team" : "A",
            "Role" : "Systems Analyst",
            "Active" : true
        }, 
        {
            "Team" : "B",
            "Role" : "Developer",
            "Active" : true
        }
    ]
}

Результат:

/* 1 */
{
    "_id" : ObjectId("5e2776c7dc791f82e7e1736d"),
    "Name" : "Mark",
    "Gender" : "M",
    "State" : "VA",
    "TeamRoles" : [ 
        {
            "Team" : "A",
            "Role" : "Quality Advisor",
            "Active" : true
        }, 
        {
            "Team" : "B",
            "Role" : "Business Analyst",
            "Active" : true
        }, 
        {
            "Team" : "C",
            "Role" : "Business Analyst",
            "Active" : true
        }
    ]
}

/* 2 */
{
    "_id" : ObjectId("5e2776c7dc791f82e7e1736e"),
    "Name" : "Stacy",
    "Gender" : "F",
    "State" : "GA",
    "TeamRoles" : [ 
        {
            "Team" : "A",
            "Role" : "Business Analyst",
            "Active" : true
        }, 
        {
            "Team" : "B",
            "Role" : "Developer",
            "Active" : true
        }
    ]
}

Ссылка: updateMany-arrayFilters

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