MongoDB - сортировка по ссылке или по «внешнему ключу» (Liftweb, Scala) - PullRequest
1 голос
/ 05 декабря 2011

У меня есть пользователь, который содержит справочное поле "o", указывающее на организацию:

> db.users.findOne()
{
"o" : ObjectId("4ec3548544ae1b7234548826")
}

Организации содержат поле "n":

> db.organisations.findOne()
{
    "n" : "My organization" 
}

Я хочусписок пользователей, отсортированных по, желательно в Scala / Lift.

1 Ответ

7 голосов
/ 05 декабря 2011

То, что вы фактически просите - это СОЕДИНЕНИЕ. MongoDB не имеет понятия о присоединении.

С точки зрения сервера, коллекции просто не знают друг о друге. Некоторые инструменты абстрагируют это (например, Morphia), но на самом деле есть только два основных способа сделать это:

  1. Ручное объединение : загрузите users, затем загрузите organizations, объедините их вместе и присоедините на стороне клиента.
  2. Денормализация : сохранить копию поля N внутри коллекции users (и синхронизировать ее). Это сделает ваш запрос быстрым, но усложнит обновления.

Этот недостаток JOIN является одним из фундаментальных компромиссов MongoDB. Если это обычный или обязательный запрос, вам нужно либо # 1, # 2, либо № 3: выбрать другую БД.

...