Mam model z następującymi atrybutami:
follower.rb
----
creator_id, user_id
following_id, user_id
Więc baza danych może zawierać wpisy takie jak:
creator_id, following_id
1, 2
3, 2
4, 2
5, 2
1, 3
2, 3
Więc w tym przypadku. 2 ma 4 obserwujących, a 3 ma 2 obserwujących.
Czy można wygenerować zapytanie, które zwróci informacje o wszystkich obserwujących? Coś jak:
{ 2: 4, 3: 2 }
może je posortować? Zasadniczo chcę uzyskać N najlepszych użytkowników z największą liczbą obserwujących.
Odpowiedzi:
1 dla odpowiedzi № 1W tym przypadku chcesz mieć rozszerzenie struktura agregacji dla MongoDB. Nie ma bezpośredniego tłumaczenia na operacje typu "szynowego", więc mongoid zapewnia dostęp do podstawowego sterownika, aby umożliwić użycie metod natywnych:
Follower.collection.aggregate([
{ "$group" => {
"_id" => "$creator_id",
"count" => { "$sum" => 1 }
}},
{ "$sort" => { "count" => -1 } },
{ "$limit" => 10 }
])
Więc $group
wykonuje grupowanie według podanego pola w _id
i $sum
operator pobiera liczbę według tej grupy.
The $sort
etap porządkuje wyniki, więc najwyższa liczba znajduje się na górze, a $limit
etap potoku określa, ile wyników jest zwracanych.