2017-02-06 2 views
0

Wie i Länge der einzelnen Elemente in einer "mol" Liste finden:Wie Objekte in der Liste der Listen zählen

Zum Beispiel, wenn ich suche "versionA" : "2.1.2" erwarte ich ot erhalten folgendes Ergebnis:

{"project" : "A", "scene" : 13455312, mol:[3,2,1]}, 
{"project" : "B", "scene" : 13455344, mol:[3,3,3]} 

Meine Daten:

{ 
     "project" : "A", 
     "scene" : 13455312, 
     "versionA" : "2.1.2", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }]}, {"data" : [ { "tran" : 'A' }]}] 
    }, 

    { 
     "project" : "B", 
     "scene" : 13455344, 
     "versionA" : "2.1.2", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}, {"data" : [ { "tran" : 'A' }, { "tran" : 'B' }, { "tran" : 'C' }]}] 
    }, 
    { 
     "project" : "C", 
     "scene" : 135555, 
     "versionA" : "2.1.3", 
     "versionB" : "2.1.9", 
     "mol" : [ {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}, {"data" : [ { "tran" : 'A' }]}] 
    } 

Antwort

1

Sie können $match zum version Feld und $map die iteriert die mol und $size, um die Länge des Datenfeldes zu berechnen.

db.collection.aggregate(
    [{ 
     $match: { 
      "versionA": "2.1.2" 
     } 
    }, { 
     $project: { 
      _id: 0, 
      "project": 1, 
      "scene": 1, 
      "mol": { 
       $map: { 
        input: "$mol", 
        as: "mo", 
        in: { 
         $size: "$$mo.data" 
        } 
       } 
      } 
     } 
    }] 
) 
+0

Danke genau was ich wollte. –