MongoDB - сортировка по ссылке или по "внешнему ключу" (Liftweb, Scala)

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

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

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

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

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

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам