2013-10-21 7 views
10

Ist es möglich, dass der $ Projekt-Aggregationsoperator von MongoDb das Dokument in ein Array umstrukturiert? Hier

ist, was ich bisher getan:

var pipeline = []; 
var project = { 
    $project : { 
     x: "$_id", 
     y: "$y" , 
     _id : 0 
    } 
}; 
pipeline.push(project); 
model.aggregate(pipeline, callback); 

Diese mir Ausgabe von Form gibt:

[ 
    { 
    x: '...', 
    y: '...' 
    } 
.... 
] 

Ich mag würde haben:

[ 
    ['..','..'] 
    .... 
] 

Ich kann leicht umstrukturieren die Ausgabe durch Iterieren, aber wirklich neugierig zu wissen, ob Aggregat selbst Array anstelle von Objekt zurückgeben könnte.

Antwort

4

Sie könnten versuchen, mit dem $ Push-Operator.

Zum Beispiel , wenn Sie Dokumente wie gehabt:

{ _id: <something>, y: 5 } 

Im Mongo Shell, wenn Sie

db.model.aggregate([ { $group: { _id: null, newArrayField: { $push: { x: "$_id", y: "$y" } } } } ]) 

eingeben würden Sie erhalten:

{ 
    "result" : [ 
     { 
      "_id" : null, 
      "newArrayField" : [ 
       { 
        "x" : ObjectId("5265dd479eb4b1d4289cf222"), 
        "y" : 5 
       } 
      ] 
     } 
    ], 
    "ok" : 1 
} 

Weitere Informationen auf $ push operator, siehe http://docs.mongodb.org/manual/reference/operator/aggregation/push/

+6

Möchten "Ergebnis" haben: [[ObjectId ("5265dd479eb4b1d4289cf222"), 5]] –