2017-05-01 3 views
1

ich eine CSV-Datei, die ich in MongoDB importiert, es hat die folgende Struktur:Gruppe/Aggregate Felder zusammen

enter image description here

ich gruppieren möchten dies mit dem Start als id, und alle anderen Felder wie childs davon, wie solche:

"_id" : "A" { 
      "destination" : B { 
       "duration" : 5 
       "duration" : 3 
       "duration" : 6 
      } 
      "destination" : C { 
       "duration" : 10 
      } 
    } 
    "_id" : "B" { 
      "destination" : A { 
       "duration" : 4 
      } 
    } 

ich die Grundlagen des Aggregations Befehl von MongoDB verstehen, habe ich versucht, diese, die auf Yogesh Antwort basiert:

db.test.aggregate([ 
{ "$group": { 
    "_id": "$start", 
    "Trips": { 
     "$push": { 
      "Destination" : "$destination", 
      "Duration"  : "$duration" 
     } 
    } 
    } 
}],{allowDiskUse:true}).pretty() 

Meine Frage ist, wie kann ich auch Dauer in dort gruppieren. Gerade jetzt, für 2 ‚Ausflüge‘ von A nach B gibt es zwei Einträge wie solche:

{ "Destination": B, 
     "Duration": 5 
    }, 
    { 
     "EndStationID": B, 
     "Duration": 3 
    } 

Wie kann ich auch solche, in eine Struktur wie folgt kombiniert werden:

{ "Destination": B { 
      "Duration": 5, 
      "Duration": 3 
    } 

Antwort

1

Wie pro Ihre CSV Struktur ich habe folgende Sammlung

{ "start" : "A", "destination" : "B", "duration" : 5 } 
{ "start" : "A", "destination" : "B", "duration" : 3 } 
{ "start" : "A", "destination" : "B", "duration" : 6 } 
{ "start" : "B", "destination" : "A", "duration" : 4 } 

Zuerst sollten Sie group Start- und Zielfelder und dann wie unter Dauer in einem Array so Aggregationsanfrag drücken:

db.collectionName.aggregate({ 
    "$group": { 
    "_id": { 
     "start": "$start", 
     "dest": "$destination" 
    }, 
    "duration": { 
     "$push": { 
      "duration": "$duration" 
     } 
    } 
    } 
}, { 
    "$project": { 
    "_id": "$_id.start", 
    "destination": "$_id.dest", 
    "duration": 1 
    } 
}).pretty() 
db.collectionName.aggregate({ 
    "$group": { 
    "_id": { 
     "start": "$start", 
     "dest": "$destination" 
    }, 
    "duration": { 
     "$push": { 
      "duration": "$duration" 
     } 
    } 
    } 
}, { 
    "$project": { 
    "_id": "$_id.start", 
    "destination": "$_id.dest", 
    "duration": 1 
    } 
}).pretty() 
+1

Danke, ich landete teilweise mit Ihrem Ansatz in Kombination mit der Antwort hier: http://stackoverflow.com/questions/16772156/nested-grouping-with-mongodb – ffritz

Verwandte Themen