Как обновить уже существующее поле в MongoDB - PullRequest
0 голосов
/ 27 июня 2018

Согласно документации MongoDB, $ set заменяет значение поля указанным значением или, если оно не существует, добавляет новое поле с указанным значением. У меня вопрос, как добавить в существующую строку, не заменяя существующую, например:

{
    "_id" : ObjectId("58dc9feca463e61042d2e462"),
    "email" : "spguillen@yahoo.com",
    "accountType" : "admin",
    "accessKeys" : [
        {
            "keyId" : "d06e6640-2f98-11e7-810b-67d01c2ba6eb",
            "name" : "Admin Key",
            "rights" : [
                "Read",
                "Create",
                "Delete"
            ]
        }
    ]
}

Я хочу добавить следующее в поле accessKeys:

{"keyId": "50fcb190-5636-11e7-855a-0d21d5eb6743", "name": "Standard Key", "rights": ["Update"]}

Без необходимости перезаписывать существующие ключи доступа. В идеале также следует установить условие для любых учетных записей, для которых accountType: admin , чтобы при отсутствии accessKeys было установлено поле accessKey с указанным выше ключом доступа, но при наличии ключа доступа добавьте указанный выше ключ доступа к существующий.

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете использовать оператор $ push , который добавит новый элемент в существующий массив. Вы также можете использовать его для документов, которые не имеют поля accessKeys - в этом случае будет создан массив из одного элемента:

db.col.update(
    {"_id": ObjectId("58dc9feca463e61042d2e462")}, 
    { $push: { 
        "accessKeys": {"keyId": "50fcb190-5636-11e7-855a-0d21d5eb6743", "name": "Standard Key", "rights": ["Update"]} 
    } 
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...