Мангуст - Запрос глубоко вложенных объектов - PullRequest
1 голос
/ 30 апреля 2019

У меня сейчас проблема с обновлением записей в глубоко вложенном документе. Теперь, чтобы упростить мою проблему, у меня есть этот пример. Давайте предположим, что я храню автомобили в моем MongoDB. Документ будет выглядеть так

{
  Make: "BMW",
  Model: "3Series",
  Wheels: [
    {
      _id: someObjectId
      Size: "19 inch",
      Screws: [
        {
          _id: someObjectId
          Type : "M15x40"
        },
        {
          _id: someObjectId
          Type : "M15x40"
        }
      ]
    }
  ]
}

Теперь, если я хочу обновить определенное колесо, мой код будет выглядеть примерно так

CarModel.findOneAndUpdate({
  "_id": CarId, "Wheels._id": WheelId
}, {
  "$set" : {
    "Wheels.$.Size": NewSize
  }
})

Теперь это работает. Но я довольно растерялся, как бы обновить конкретный винт, когда я прохожу 2 массива. Любая идея, как я мог бы сделать эту работу?

1 Ответ

1 голос
/ 30 апреля 2019

Вам нужна функция arrayFilters , чтобы определить путь для нескольких вложенных массивов:

CarModel.findOneAndUpdate(
    { "_id": CarId },
    { $set: { "Wheels.$[wheel].Screws.$[screw].Type": "something" } },
    { arrayFilters: [ { 'wheel._id': WheelId }, { 'screw._id': screwId } ] })
...