2014-09-03 5 views
1

Je cherche à effectuer un groupe par une valeur donnée dans un objet de nid. Par exemple, ma structure du document est la suivante:Requête de groupe sur un objet imbriqué dans mongodb

{ 
    "ip_address": "192.168.132.12", 
    "timestamp" : "2014-08-28T06:41:24", 
    "response" : 200, 
    "uri": { 
    "term": "value A", 
    "page" : "1", 
    "category" : "category 1" 
    } 
} 

Ce que je cherche à atteindre est l'exécution d'un agrégat de groupe sur le champ uri.term. Je sais comment cela est réalisé pour un champ direct, par ex. "ip_address":

db.search_stb.aggregate({ $group : {_id : "$ip_address", total : { $sum : 1 }} }); 

mais je suis complètement coincé sur la façon de le faire pour l'objet imbriqué.

Toute aide serait grandement appréciée!

+0

Avez-vous essayé {_id: "$ uri.term"}? –

Répondre

1

Vous avez juste besoin d'utiliser le '.' opérateur comme suit:

db.search_stb.aggregate({ $group : {_id : "$uri.term", total : { $sum : 1 }} }); 
+0

merci - je me sens vraiment stupide comme c'était une réponse si simple! Une autre question, comme le 'uri.term' est facultatif, comment puis-je obtenir l'agrégat pour exclure ou ignorer les valeurs nulles? – clangers

+0

Np, exclure non nul serait une autre question, vérifiez les questions avec le même tag, vous trouverez sûrement la bonne réponse .. :) Acceptez la réponse si elle est utile afin qu'elle agisse comme une référence pour les autres. – vmr

Questions connexes