2013-09-30 5 views
0

Je suis un novice MongoDB. J'essaie de regrouper les données d'un document qui fonctionne. Mais je veux maintenant ajouter une colonne contenant des données statiques. Par exemple, je pourrais écrire quelque chose comme ça en SQL.Groupe Mongodb par colonne none inexistante

select e.dptId, count(e.empId), 'foo' as foo 
from employee e 
group by e.dptId, 'foo' 

J'ai essayé,

db.employee.aggregate(
    { $group: { 
     _id: { dptId: '$dptId', foo: 'foo' }, 
     empCount: { $sum: 1 } 
    }} 
); 

qui me donne « exception: les références de chemin sur le terrain doivent être préfixées avec un préfixe « $ » Je ne peux pas avec $, car ce serait un champ. . référence

J'ai aussi essayé,

db.employee.aggregate(
    { $group: { 
     _id: { dptId: '$dptId' }, 
     empCount: { $sum: 1 }, 
     foo: 'foo' 
    }} 
); 

qui me donne « exception: le champ global du groupe 'temp' doit être défini comme une expression à l'intérieur d'un objet ".

J'ai essayé de jouer avec des accolades, sans accolades (comme indiqué), etc. Pas de chance. Est-ce même possible en mongodb?

Répondre

0

Une astuce serait d'attribuer conditionnellement une valeur avec l'opérateur $ifNull:

db.employee.aggregate(
    { $group: { 
     _id: { dptId: '$dptId', 
       foo: { $ifNull: ['$foo', 'foo'] } 
      }, 
     empCount: { $sum: 1 } 
    }} 
); 

Au-dessus, il semble juste pour un champ appelé foo et si ce n'est pas présente, définit le champ groupé foo à la valeur de foo. Vous pouvez également modifier le champ que MongoDB vérifie.

Vous pourrez peut-être utiliser $concat et pour obtenir le résultat souhaité:

db.employee.aggregate( 
{ $group : { 
    _id : { dptId: '$dptId', 
      foo: { $concat : [ "foo" ] } 
      }, 
    empCount: { $sum: 1 } 
}}); 
+0

Merci pour votre réponse. Le premier, où nous essayons de faire partie de _id, échoue avec 'Jeton inattendu} même si j'ai copié et re-vérifié le script encore et encore. Tous les {et} correspondent. Si je supprime la partie foo, cela fonctionne correctement. Quant à concat, je ne peux pas l'utiliser, car il ne fait pas partie de l'opérateur du groupe. – etrast81

+0

'$ concat' peut certainement fonctionner avec $ group. J'ai développé le code. – WiredPrairie

+0

En outre, j'ai omis accidentellement les marqueurs de tableau '[' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'isNull' quand j'ai tapé le code. – WiredPrairie