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