/ / Ile wierszy ma wartość Mongodb / Mongoid? - ruby, mongodb, mongoid

Ile wierszy ma wartość Mongodb / Mongoid? - ruby, mongodb, mongoid

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 № 1

W 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.