liés à MongoDB Group using Ruby driverComment utiliser MongoDB Ruby Driver pour faire un "Groupe" (groupe par)?
si je veux faire quelque chose comme ce qui suit dans SQL:
select page_id, count(page_id) from a_table group by page_id
Je pensais que le doc MongoDB dit
http://api.mongodb.org/ruby/current/Mongo/Collection.html#group-instance_method
group(key, condition, initial, reduce, finalize = nil)
# returns an array
donc de l'autre poste, j'utilise:
Analytic.collection.group( "fucntion (x) return {page_id : x.page_id}",
nil,
{:count => 0},
"function(x, y) { y.count++ }" )
mais il retourne en fait
[{"count"=>47.0}]
qui est le nombre total d'enregistrements (documents) dans la collection. Est-ce que quelque chose de faux n'est pas correct? Je pensais que la clé est peut-être une chaîne statique comme dans
http://kylebanker.com/blog/2009/11/mongodb-count-group/
db.pageviews.group(
{
key: {'user.agent': true},
initial: {sum: 0},
reduce: function(doc, prev) { prev.sum += 1}
});
mais ce n'est pas dans l'autre poste stackoverflow.
Mise à jour: En fait, dans le lien ci-dessus, la solution comme
Analytic.collection.group( ['page_id'], nil,
{:count => 0}, "function(x, y) { y.count++ }" )
œuvres, mais juste se demander pourquoi la première méthode dans ce poste ne fonctionnait pas.
si je corrige l'orthographe, cette ligne renverra '[{" page_id "=> nil," count "=> 47.0}]' encore ... –
Vous devriez vous assurer que vos données ont effectivement des valeurs pour page_id en plus néant. Ce résultat semble indiquer que tous les 47 documents ont un page_id de zéro. J'utilise la version 1.6.0 de mongodb et gem 1.0.7 et je ne peux pas dire avec certitude si oui ou non les versions précédentes de l'un ou l'autre pourraient produire des résultats différents. –