Ответ 1
При моделировании отношений "многие ко многим" в базе данных документов вы обычно храните коллекцию внешних ключей только в одном из документов. Документ, который вы выбираете, в значительной степени зависит от того, какое направление вы намерены пересечь. Перемещение по ней в одном направлении тривиально, для этого другим путем требуется индекс.
Возьмите пример корзины покупок. Более важно точно знать, какие предметы находятся в определенной корзине, чем корзины содержат определенный предмет. Поскольку мы обычно следуем за отношениями в направлении корзины к пункту, имеет смысл хранить идентификаторы предметов в корзине, чем для хранения идентификаторов корзины в элементе.
Вы можете по-прежнему пересекать отношения в противоположном направлении (например, найти корзины, содержащие определенный элемент), используя индекс, но индекс будет обновляться в фоновом режиме, чтобы он не всегда был на 100% точным. (Вы можете дождаться, когда индекс станет точным с помощью WaitForNonStaleResults
, но эта задержка будет отображаться в вашем пользовательском интерфейсе.)
Если вам требуется немедленная 100% -ная точность в обоих направлениях, вы можете хранить внешние ключи в обоих документах, но вашему приложению придется обновлять два документа всякий раз, когда создается или уничтожается связь.