J'essaie de ramener une liste de combinaisons année/mois avec des comptes pour décrire les articles de blog. L'idée est qu'ils seront affichés comme ceci:Groupe MongoDB utilisant le pilote Ruby
- Janvier 2010 (1 poste)
- décembre 2009 (2 messages)
- ...
J'ai réussi à obtenir ce de travailler en utilisant le shell MongoDB JS, et il renvoie les résultats dans un format utile:
db.posts.group({
keyf: function(x){
return {
month: x.datetime.getMonth(),
year:x.datetime.getFullYear()
};
},
reduce: function(x,y){ y.count++ },
initial:{count:0}
})
résultats:
[ { "month" : 0, "year" : 2010, "count" : 3 },
{ "month" : 0, "year" : 1970, "count" : 1 } ]
C'est génial, exactement ce que je suis après. Cependant, en essayant de convertir cela en code approprié pour le pilote ruby, je ne peux pas le faire fonctionner. Je l'ai regardé la documentation et de ma compréhension, ce qui suit devrait donner les mêmes résultats (j'utilise MongoMapper, d'où le Post.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)
Au lieu de redonner le bon choix de données utiles, je m obtenir ce gâchis: (! et ma compréhension du code source)
{
"function(x) { return { month: x.datetime.getMonth(), year:x.datetime.getFullYear() }; }" => nil,
"count" => 4.0
}
il semble que ce soit il est complètement en train de défier sa propre documentation ou je manque quelque chose de fondamental ici. J'arrache presque mes cheveux, toute aide est acceptée avec reconnaissance.
J'ai vérifié les versions et j'ai installé 0.18 et 0.18.2. J'ai enlevé l'ancienne version et mis à jour MongoMapper (la version que j'avais dépendait de 0.18). Le problème persiste toujours. J'ai également essayé d'utiliser le pilote comme vous l'avez fait et dans mon cas, il échoue toujours. Je ne comprends pas pourquoi ça agirait différemment pour toi que pour moi? EDIT: en essayant cela dans son propre script, vous obtenez le bon résultat. Il semble seulement échouer à partir de l'application de mes rails. –
Hmm. Je ne sais pas quel effet Rails pourrait avoir sur ça. Je pense que la meilleure chose serait pour vous de créer un cas de test complet échouant pour moi et John (de MongoMapper). –
Oh, j'ai été un pilier monumental. Il s'avère que c'était la différence de version 0.18 à 0.18.2. J'ai juste oublié de redémarrer le serveur de dev après avoir enlevé le vieux gem et tout mis à jour. En revenant et en regardant la source 0.18 sur github, je vois qu'entre 0.18.2 et 0.28.2, le support du code keyf a été ajouté et cela l'a corrigé. Je me sens bien idiot :) –