2012-12-31 6 views
0

Je suis en train de faire quelque chose de similaire àgroupe MongoDB par colonne

select column, count(*) 
    from table 
group by column 

dans MongoDB.

J'ai essayé

db.table.group({ 
    key: 'column', 
    initial: {sum:0}, 
    reduce: function(doc, prev) { prev.sum += 1; } } 
}) 

Je voulais utiliser quelque chose comme somme de $, mais il ne fonctionnait pas.

Pour

db.table.group({ 
    key: 'column' 
}) 

Je reçois

uncaught exception: group command failed: { "errmsg" : "$reduce has to be set", "ok" : 0 } 

ma version MongoDB est 2.0.8 (donc je ne peux pas utiliser le cadre d'agrégation).

Selon résultat, je ne reçois pas le résultat des valeurs de colonnes groupées, mais pour résultat

select count(*) from table 

Qu'est-ce que je fais mal?

modifier: (données ajoutées)

> db.table.find() 
{ "_id" : ObjectId("50e180ce9449299428db83e8"), "column" : "a", "cnt" : 1 } 
{ "_id" : ObjectId("50e180d09449299428db83e9"), "column" : "b", "cnt" : 2 } 
{ "_id" : ObjectId("50e180d19449299428db83ea"), "column" : "c", "cnt" : 3 } 
> db.table.group({ key: 'column', initial: { sum: 0}, reduce: function(doc, prev) { prev.sum += 1; } }) 
[ { "sum" : 3 } ] 

Peut-être que je l'utilise dans le mauvais sens, mais je pense

[ { "a": 1, "b": 1, "c": 1 } ] 
+0

vérifier les docs: http://docs.mongodb.org/manual/reference/commands/#group il est 'reduce' de $ pas' de reduce', qui est littéralement ce que cette erreur signifie. – Sammaye

+0

MongoDB accepte 'reduce' au lieu de' $ reduce', et je reçois le même mauvais résultat quand j'utilise '$ reduce' :-( – Betlista

+0

Sachez que' group' ne fonctionne pas lorsque le sharding est activé. cas, vous pouvez être forcé d'utiliser le framework d'agrégation ou map-reduce – ghik

Répondre

1

Le key doit être un objet, pas seulement un nom de domaine et vous avez un } sur la ligne reduce.

Essayez ceci:

db.table.group({ 
    key: {column: 1}, 
    initial: {sum:0}, 
    reduce: function(doc, prev) { prev.sum += 1; } 
}) 
+0

J'ai ajouté un exemple de données à la question, ça ne fonctionne pas comme je m'y attendais ... – Betlista

+0

@Betlista J'ai mis à jour la réponse pour résoudre un problème avec le ' key' aussi – JohnnyHK

+0

oui, c'est tout, merci ;-) – Betlista