2016-08-05 39 views
0

MongoDB Äquivalent fürMongoDB Aggregation Pipeline analog für SQL-Abfrage mit substr Betrieb

SELECT state, SUM(pop) AS totalPop 
FROM zipcodes 
GROUP BY state 
HAVING totalPop >= (10*1000*1000) 

ist

db.zipcodes.aggregate([ 
    { $group: { _id: "$state", totalPop: { $sum: "$pop" } } }, 
    { $match: { totalPop: { $gte: 10*1000*1000 } } } 
]) 

Wie kann ich MongoDB Äquivalent für SQL-Abfrage, wo substr Operation beteiligt ist

SELECT substr(state,0,3), SUM(pop) AS totalPop 
FROM zipcodes 
GROUP BY substr(state,0,3) 
HAVING totalPop >= (10*1000*1000) 
+0

Geben Struktur des Dokuments zu erhalten. – tarashypka

Antwort

1

Sie können $substr String Aggregation-Operator verwenden auf status Feld und $project Bühne am Ende der Aggregation Pipeline gewünschten Ausgang

db.zipcodes.aggregate([ 
    { $group: { "_id": { $substr: [ "$state", 0, 3 ] }, "totalPop": { $sum: "$pop" } } }, 
    { $match: { "totalPop": { $gte: 10*1000*1000 } } }, 
    { $project: { "state": "$_id", "totalPop": 1, "_id": 0 } } 
]); 
+0

Danke für die schnelle Antwort. Es klappt. Ich stehe jedoch jetzt vor einer anderen Herausforderung. Meine Daten werden als Epoche 1470421645 gespeichert, die auch Stunden, Minuten und Sekunden enthält. Allerdings möchte ich nur die Datumsinformation, die 1470355200 ist. So 1470421645 = 2016/08/05 18:27:25 GMT und 1470355200 = 2016/08/05 00:00:00 GMT. Schätzen Sie, wenn Sie eine Anleitung geben können –

+0

@SourabhJain Bearbeiten Sie hier Ihre Frage mit Ihrer neuen Anfrage oder erstellen Sie eine andere Frage dazu. Wenn Sie diese Frage bearbeiten, geben Sie die genaue Struktur Ihrer Dokumente in der MongoDB-Sammlung an. – tarashypka