Доступ к другой коллекции в карте MongoDB уменьшает - PullRequest
3 голосов
/ 08 марта 2012

Я бы хотел получить доступ к другой коллекции из функции карты, чтобы я мог найти ключ и выполнить некоторые агрегации.Могу ли я получить доступ к любой коллекции, используя db.collection_name или что-то подобное в коде BSON?

Ответы [ 2 ]

6 голосов
/ 08 марта 2012

Если вы попробуете это локально, это сработает.Однако в сценарии с сегрегацией это не удается, поскольку коллекция или данные в коллекции не будут локальными для сегмента.

Это также плохая практика, поскольку M / R может вызывать каскадные запросы, которые могут быть трудными для выполнения.trace.

Если вы столкнулись с этой проблемой, у вас есть несколько опций:

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

Я видел оба использованных варианта,Я даже видел # 2, преобразованный в простой цикл for, который обрабатывает обе части одновременно.Я успешно заменил некоторые задания M / R на простые циклы for и upserts.

2 голосов
/ 08 марта 2012

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

...