Мангуст: поиск и обновление нескольких вложенных документов

#node.js #database #mongodb #mongoose

#node.js #База данных #mongodb #мангуст

Вопрос:

Мои документы следующие.

 {
    "order_id" : "1",
    "payment_status" : false,
    "items" : [
        {
            "item_id" : 1,
            "payment_status" : false,
        },
        {
            "item_id" : 2,
            "payment_status" : false,
        },
        {
            "item_id" : 3,
            "payment_status" : false,
        },
    ]
}
  

Мне нужно обновить поля payment_status для {"order_id":1} и {"item_id" : 1} и {"item_id" : 3} . Кроме того, мне нужно обновить то же самое оптом для соответствия условиям. Возможно ли это в мангусте?

Ответ №1:

Вы хотите использовать $arrayFilters следующим образом:

 db.collection.updateMany({
  "order_id": "1"
},
{
  "$set": {
    "items.$[item].payment_status": true
  }
},
{
  arrayFilters: [
    {
      "item.item_id": {
        $in: [
          1,
          3
        ]
      }
    }
  ]
})
  

Игровая площадка Mongo

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

1. Спасибо. Похоже, он работает в Mongo Playground. Я проверю то же самое в своем коде и скоро опубликую обновление