2013-02-27 6 views
0
User{ 
     '_id' : ObjectId(..), 
     'Friends': [{_id : ref1},{id : ref2}] 
     'Posts' : [{'popularity' :103,...}, {'popularity' : 86,...} 
} 

И каждая из ссылок связана с другим идентификатором пользователя в Друзьях. Какой самый быстрый способ получить самые популярные сообщения из всех друзей пользователей? Возможно, только верх 20.Как вы суммируете данные из ссылок в mongodb?

ответ

0

MongoDB позволяет гибкий дизайн схемы компенсировать отсутствие объединений. Поэтому я предполагаю, что в этой схеме отношение «двустороннее» (т. Е. Если я твой друг, то ты в моем массиве друзей, и я в твоем массиве друзей?)

В этом случае вы можете сделать следующий запрос агрегации:

db.users.aggregate([ 
    {$match : { "Friends._id": <my _id> } }, 
    {$unwind : "$Posts" }, 
    {$sort : { "Posts.popularity" : -1 }, 
    {$limit : 20 } 
]) 

в принципе, фильтр для всех пользователей, которые меня в своих друзьях массиве, раскручивать свои посты сортировки массива, чтобы получить сообщения с самым высокой популярностью первой и пределом наверх 20.

If у вас нет индекса на «Friends._id», это не будет быстрый запрос.

+0

Это он. Я не верю, что добавил индекс в Friends._id. Будет ли это так же просто, как использовать makeindex? – carboncomputed

+1

Да, но помните, что это операция блокировки, если вы не используете опцию «background: true». http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/ –

 Смежные вопросы

  • Нет связанных вопросов^_^