2015-05-24 2 views
3

У меня возникли трудности с моим листингом для моего приложения. У меня есть база данных с двумя коллекциями.Получить все имена пользователей из элементов user_id? (Запрос Mongodb)

  • Пользователи
  • Рыба

В моей коллекции рыбы я также user_id. Когда я забираю всю рыбу, я получаю все, включая user_id. Однако user_id мне действительно не помогает, я хочу показать имя пользователя, принадлежащее этому user_id.

Так выглядит мой запрос.

Fish.find().sort({weight: -1}).limit(10).exec(function(err, leaderboard) { 
     if(err) return res.json(500, {errorMsg: 'Could not get leaderboard'}); 

     res.json(leaderboard); 
    }) 

Я чувствую, что мне нужно сделать еще один запрос, чтобы получить все имена, принадлежащие к user_ids я получаю от первого запроса. Может быть, использовать петлю?

MongoDb является для меня довольно новым и не знает, что искать. Любые советы, советы, ссылки очень приветствуются.

+1

Если используются Мангуст, вы можете использовать свою поддержку [населения] (Http://mongoosejs.com/docs/populate.html). – JohnnyHK

ответ

2

Вы можете найти полезную информацию о документации MongoDB Database References.

Первое, что нужно рассмотреть на использовании полей из разных коллекций в MongoDB является:

MongoDB не поддерживает соединения. В MongoDB некоторые данные денормализуются или хранятся со связанными данными в документах, чтобы удалить необходимость объединения. Однако в некоторых случаях имеет смысл хранить связанную информацию в отдельных документах, как правило, в разных коллекциях или базах данных.

В вашем случае вы можете захотеть сохранить информацию из коллекции Fish в виде встроенных документов внутри пользователей из коллекции пользователей.

Если это не вариант, то вы можете использовать Manual References или пропустить через user_ids, предоставленные в результате запроса по коллекции Fish.

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

Users.find({user_id:<USER_ID>},{username:1}) 
Смежные вопросы