Grupa MongoDB używająca sterownika Ruby
Próbuję przywrócić listę kombinacji rok / miesiąc z licznikami do opisu wpisów na blogu. Chodzi o to, że będą wyświetlane w następujący sposób:
Styczeń 2010 (1 post)Grudzień 2009 (2 posty)...Udało mi się to uruchomić, używając powłoki JS MongoDB, i zwraca wyniki w użytecznym formacie:
db.posts.group({
keyf: function(x){
return {
month: x.datetime.getMonth(),
year:x.datetime.getFullYear()
};
},
reduce: function(x,y){ y.count++ },
initial:{count:0}
})
Wyniki:
[ { "month" : 0, "year" : 2010, "count" : 3 },
{ "month" : 0, "year" : 1970, "count" : 1 } ]
To jest świetne, dokładnie to, czego oczekuję. Jednak próbując przekonwertować ten kod na odpowiedni dla sterownika ruby, nie mogę go uruchomić. Przejrzałem dokumentację i zrozumiałem, że poniższe powinny dawać takie same wyniki (używam MongoMapper, stądPost.collection
):
@archive = Post.collection.group(
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }",
nil, { :count => 0 }, 'function(x,y){y.count++}', true)
Zamiast oddawać ładny zestaw przydatnych danych, mam ten bałagan:
{
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil,
"count" => 4.0
}
Wydaje się, że albo całkowicie przeciwstawia się własnej dokumentacji (i mojemu zrozumieniu kodu źródłowego!), Albo brakuje mi tutaj czegoś fundamentalnego. Prawie wyciągam włosy, każda pomoc wdzięcznie przyjęta.