Mongodb query bestimmten Monat|Jahr Datum nicht
Wie kann ich Abfragen eines bestimmten Monats in mongodb, nicht Datumsbereich, ich brauche im Monat, um eine Liste von Kunden Geburtstag für den aktuellen Monat.
In SQL wird etwas sein wie:
SELECT * FROM customer WHERE MONTH(bday)='09'
Nun muss ich das übersetzen, die in mongodb.
Hinweis: Meine Daten sind schon gespeichert in MongoDate geben, habe ich dieses denken, das wird einfach zu arbeiten, bevor aber jetzt ich kann nicht finden, wie zu tun, diese einfache Sache.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun, dass die Verwendung
aggregate
mit der$Monat
projektionsoperator:$match
an den Anfang der pipeline, die verwendet$exists
zum filtern der Dokumente, bevor Sie die$project
.Mit MongoDB 3.6 und neuer verwenden, können Sie die
$expr
- operator in Ihrerfind()
Abfrage. Dies ermöglicht Ihnen die Erstellung von query-Ausdrücke, Vergleich von Feldern aus dem gleichen Dokument in ein$match
Bühne.Anderen MongoDB-Versionen, betrachten Sie zum ausführen einer aggregation pipeline, nutzt die
$schwärzen
Betreiber, da es Ihnen erlaubt zu integrieren, mit einer einzigen pipeline, eine Funktionalität mit$project
erstellen Sie ein Feld für den Monat in einem date-Feld und$match
zum filtern der Dokumenteentsprechend der vorgegebenen Bedingung der Monat September.
In der oben
$schwärzen
verwendet$dir
tenary Betreiber als Mittel, um den bedingten Ausdruck erstellen der system-Variablen, die nicht der Redaktion. Der logische Ausdruck in$dir
überprüfenfür eine Gleichheit der ein Datum operator-Feld mit einem angegebenen Wert, wenn das passt dann
$schwärzen
zurückkehren wird, die Dokumente über die$$BEHALTEN
system variable und verwirft ansonsten mit$$PRUNE
.Ausführen der folgenden pipeline sollte Ihnen das gewünschte Ergebnis:
Ist ähnlich wie ein
$project
+$match
combo, aber Sie müssten dann wählen Sie alle übrigen Felder, die in der pipeline:Mit einer anderen alternative, wenn auch langsame Abfrage, die mit der
find()
Methode mit$wo
als:{ "$where": "this.bday.getMonth() === 8" }
In dieser Abfrage, kann ich$in
? Ich habe ein array von Monaten wie [2, 4,7]. Wennbday.getMonth()
gleich einen beliebigen Wert von meinem array, ich möchte, dass der Datensatzdb.collection.find({ "$expr": { "$in": [{ "$month": "$bday" }, [2, 4,7]] } })
sonstdb.collection.find({ "$where": "[2, 4, 7].indexOf(this.bday.getMonth()) >= 0" })
Wenn Sie besorgt sind Energieeffizienz, möchten Sie vielleicht zu speichern, der Monat, die Daten in einem separaten Feld in jedem Dokument.
Erste, Sie brauchen, um zu überprüfen, ob der Datentyp ist in Isodatum.
WENN nicht, können Sie ändern Sie den Datentyp, wie im folgenden Beispiel.
Nun finden Sie es in zwei Möglichkeiten
Oder durch aggregation