Если вы попробуете это локально, это сработает.Однако в сценарии с сегрегацией это не удается, поскольку коллекция или данные в коллекции не будут локальными для сегмента.
Это также плохая практика, поскольку M / R может вызывать каскадные запросы, которые могут быть трудными для выполнения.trace.
Если вы столкнулись с этой проблемой, у вас есть несколько опций:
- Денормализация данных : если
map
для сбора A
необходимополя x,y,z
из коллекции B
, затем скопируйте эти поля в A
.Да, он не нормализован, но MongoDB не является реляционной базой данных, он не предназначен для нормализации. - Multi-part M / R : во многих случаях вы можете достичь того же результата,выполнение нескольких различных операций и запись результатов в одну коллекцию.Поэтому, возможно, вы сначала выполняете M / R для
A
, а затем зацикливаете вывод и обновляете данные из B
в отдельном сценарии / процессе.
Я видел оба использованных варианта,Я даже видел # 2, преобразованный в простой цикл for
, который обрабатывает обе части одновременно.Я успешно заменил некоторые задания M / R на простые циклы for
и upserts.