По какой-то причине, bulkWrite и arrayFilter не изменяют документ. MongoDB и Mongoose - PullRequest
1 голос
/ 04 марта 2020

У меня есть два поддокумента, которые в основном имеют одинаковую структуру. Каждый из этих документов включает в себя массив объектов с именем scheduleInfo . Этот массив структурирован следующим образом.

EquipmentList

scheduleInfo: [{month: String, hours: Number, frequency: String, equipId: String, uniqId: String}]

AdditionalLabor

scheduleInfo: [{month: String, hours: Number, frequency: String, addLaborId: String, uniqId: String}]

Это код I используйте для добавления объектов в scheduleInfo в equipmentList

 OpportunityModel.bulkWrite(
  equipSch.map(d => ({
    updateOne: {
      filter: { sfOppId: oppId },
      update: {
        $set: { "equipmentList.$[e].scheduleInfo": d.equipSch }
      },
      upsert: true,
      arrayFilters: [{ "e.sfEquipId": d.equipId }]
    }
  }))
)

, этот код выполняется правильно. Поскольку scheduleInfo в AdditionalLabor по сути одно и то же, этот код я использую для добавления объектов в scheduleInfo в AdditionalLabor

 OpportunityModel.bulkWrite(
  additionalLaborSch.map(d => ({
    updateOne: {
      filter: { sfOppId: oppId },
      update: {
        $set: { "additionalLaborCostInfo.$[e].scheduleInfo": d.schedule }
      },
      upsert: true,
      arrayFilters: [{ "e._id": d.addLaborId }]
    }
  }))

ЭТО НЕ РАБОТАЕТ Я получаю чтение, показывающее, что он нашел соответствующие документы, но не изменил ничего.

Если я избавлюсь от фильтра списка и использую подстановочный знак $ [], он изменяет документ, но устанавливает одно и то же расписание для всех дополнительных элементов Labor, что неверно. Я давно смотрю на этот код и не знаю, почему он не работает. Пожалуйста, помогите!

1 Ответ

0 голосов
/ 04 марта 2020

Благодаря Тому ({ ссылка }) и actraiser ({ ссылка }) мне удалось найти решение. Изменение моего arrayFilters для AdditionalLabor на

arrayFilters: [{ "e._id": mongoose.Types.ObjectId(d.addLaborId) }]

Работает.

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