Как обновить поле в массиве в документации - PullRequest
0 голосов
/ 02 февраля 2019

У меня есть документ со следующей структурой.Я хочу вставить новый файл в массив files , а затем установить для всех остальных статусов файлов значение "НЕАКТИВНО".После вставки я пытаюсь использовать следующий код для обновления другого файла массива, но он не может соответствовать.

{
  {
 "id":"fafsahjaf867rwhrbjw",
 "files" : [
            {"name": "123", status:"ACTIVE"},
            {"name": "124", status:"ACTIVE"},
            {"name": "125", status:"ACTIVE"},
            {"name": "126", status:"ACTIVE"},
           ] 
   },
}

    query = bson.M{ "id": productId,
    "files": bson.M{
        "$not": bson.M{"$elemMatch": fileObj}}}

    update = bson.M{
    "$set": bson.M{
        "files.$.status": "INACTIVE",
    },
  }

1 Ответ

0 голосов
/ 02 февраля 2019

Если у вас Mongo> = 3.6, вот пример для редактирования всех, кроме последнего с именем 126.

db.collection.update(
  { "id" : "fafsahjaf867rwhrbjw", "files.name": "126" },
  { "$set": { "files.$[elem].status": "INACTIVE" } },
  { "arrayFilters": [{ "elem.name": {$ne : "126"} }], "multi": true }
)

Получил это решение из Как обновить несколько элементов массива в mongodb

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