2016-06-10 21 views
0

Gruppierung über Ich habe einige Dokumente mit etwa folgenden Struktur:Mongoid mehrere eingebetteten Dokumente

{ 
"_id": "derp", 
    "name": "thing", 
    "animal": { 
    "_id": "abc", 
    "stuff": [ 
     "blah", 
     "wah" 
    ] 
    }, 
}, 
{ 
    "_id": "nerp", 
    "person": { 
    "_id": "bc", 
    "enough": [ 
     "lah", 
     "ah", 
     "mwah" 
    ] 
    } 
} 

Ich suche die Zeilen in der Arrays „Stoffe“ und „genug“ zu zählen. Ich dachte zuerst, dass ich etwas mit dem Abwickeln tun könnte, aber wenn ich es einmal für jedes eingebettete Dokument nenne, "Person" und "Tier", dann werde ich mit nichts festhalten.

Ich endete damit, getrennte Abfragen zu machen, um die Zählungen von jedem inneren Array von "stuff" und "genug" zu bekommen, aber ich würde es gerne alles in einer Abfrage machen.

Weiß jemand, wie ich gehen würde, um die Zählung für jede von diesen zu erhalten und sie dann in ein getrenntes Feld wie "object_count" zu setzen?

Antwort

1

Nach einem Chat und Frage-Update - das funktioniert Lösung auf Datensatz-Test:

var unwind = { 
    $unwind : "$array" 
} 
var project = { 
    $project : { 
     _id : 1, 
     array : { 
      $cond : [{ 
        $ne : ["$a", []] 
       }, "$a", "$b"] 
     } 
    } 
} 

var group = { 
    $group : { 
     _id : "$_id", 
     a : { 
      $push : "$animal.stuff" 
     }, 
     b : { 
      $push : "$person.enough" 
     } 
    } 
} 
var group2 = { 
    $group : { 
     _id : "$_id", 
     sum : { 
      $sum : 1 
     } 
    } 
} 

db.info.aggregate([group, project, unwind, unwind, group2]) 

Hauptidee ist, alle Sachen in einem Array setzen, entspannen Sie dann (wie wir uns entspannen müssen dann drängen zweimal) und schließlich zählen.

+0

Hm ... Eigentlich dachte ich, dass funktioniert, aber Moped sagt "Ausnahme: ungültiger Operator '$ Size' – unflores

+0

Welche Version von Mongo hast du? – profesor79

+0

Ich habe Version 2.6.3 so $ Größe sollte funktionieren. Ich habe etwas mehr zu sehen – unflores

Verwandte Themen