Нужно сопоставить значение массива в mongodb и добавить в него

#arrays #mongodb #mongoose #mongodb-query

Вопрос:

 {
    "_id": "100",
    "menu": [
        {
            "type": "1",
            "isenabled": true,
            "items": [
                {
                    "key": "activity",
                    "enabled": true,
                    "criteria": [
                        {
                            "key": "account",
                            "value": [
                                "active"
                            ],
                            "isExclude": false
                        }
                    ],
                    "eligible": [
                        "QA",
                        "DE"
                    ],
                    "isItem": false
                }
            ]
        }
}
 

У меня есть следующие типы документов в коллекции.
Здесь я хотел определить подходящее значение, например, везде, где есть ТОЛЬКО «QA», «DE», нам нужно добавить несколько дополнительных значений.
Как мы можем сделать это в нескольких документах одновременно.

 "eligible": [
                "QA",
                "DE"
             ]
 

Комментарии:

1. каков ваш ожидаемый результат

Ответ №1:

используйте $push

 db.collection.update({},
{
  $push: {
    "menu.$[m].items.$[i].eligible": "US"
  }
},
{
  arrayFilters: [
    {
      "m.type": "1"
    },
    {
      "i.eligible": [
        "QA",
        "DE"
      ]
    }
  ],
  multi: true
})
 

mongoplayground

Комментарии:

1. Большое спасибо, Ютинг. Это работает нормально. Я попробовал приведенный ниже метод, чтобы добавить несколько ata-времени, и он также работает, как ожидалось. «menu.$ [m].items.$ [i].приемлемый»: { $each: [ «US», «WQ», «ER» ]