1

Ein Dokument in der Sammlung sieht genannt zählen ‚myCollection‘ wie folgt aus:MongoDB Aggregat und

{ 
    _id : 57b4b4e028108d801738a472, 
    updatedAt : 2016-08-17T19:03:01.831+0000, 
    createdAt : 2016-08-17T19:02:56.887+0000, 
    from : 57b1c2fc4bf55ba009b36c84, 
    to : 57b1c75e4bf55ba009b36c85, 
} 

Ich brauche das Auftreten von ‚von‘ und ‚bis‘ zählen und mit der Sammlung von Dokumenten am Ende wie folgt:

{ 
    "_id" : 7b1c2fc4bf55ba009b36c84, 
    "occurredInFrom" : 12, 
    "occurredInTo" : 16 
} 

wo _id von entweder 'von $' kommt oder '$ zu'.

Die falsche Aggregatabfrage ich geschrieben habe, ist dies:

{ 
    $group: { 
    _id: "$from", 
     occurredInFrom: { $sum: 1 }, 
     occurredInTo: { $sum: 1} 
    } 
} 

ich auf jeden Fall, dass _id sehen: „$ von“ nicht ausreichend ist. Kannst du mir bitte den richtigen Weg zeigen?

Hinweis: Die Struktur von 'myCollection' ist nicht endgültig, wenn Sie denken, dass es eine bessere Struktur gibt, schlagen Sie sie bitte vor.

+2

Related to [MongoDB Aggregatabfrage oder zu komplex?] (Https://stackoverflow.com/questions/35161734/mongodb-aggregate-query-or-too-complex) und [Mongo-Gruppe und Summe mit zwei Feldern] (https://stackoverflow.com/questions/35549200/mongo-group-and-sum-with-two-fields/35550524#35550524) – styvane

Antwort

1

Versuchen Sie, diese

db.myCollection.aggregate([ 
    { $project: 
    { _id: 0, 
     dir: [ 
     {id:"$from", from:{"$sum":1}, to:{"$sum":0}}, 
     {id:"$to", from:{"$sum":0}, to:{"$sum":1}} 
     ] 
    } 
    }, 
    { $unwind : "$dir" }, 
    { $group: 
    { 
     _id: "$dir.id", 
     occurredInFrom: { $sum: "$dir.from" }, 
     occurredInTo: { $sum: "$dir.to" } 
    } 
    } 
]) 
+0

Ausnahme: unzulässiger Feldtyp Array im Objektausdruck (at 'dir'), code: 15992 – Granga

+0

Ja, ich habe behoben, und es funktioniert für meine db –

+0

Es kann sein, die meine DB-Version, 3.0 mongolab Sandbox. Ich werde versuchen, einen Weg zu finden, damit es in dieser älteren Version funktioniert. Vielen Dank. – Granga