Abfrage Mongodb auf Monat, Tag, Jahr... von datetime
Ich bin mit mongodb und ich speichern datetime in meiner Datenbank auf diese Weise
für ein Datum "17-11-2011 18:00 Uhr" I Shop:
date = datetime.datetime(2011, 11, 17, 18, 0)
db.mydatabase.mycollection.insert({"date" : date})
Ich würde gerne eine Anfrage wie
month = 11
db.mydatabase.mycollection.find({"date.month" : month})
oder
day = 17
db.mydatabase.mycollection.find({"date.day" : day})
jemand weiß, wie man diese Abfrage?
- Mein Ansatz hat einige performance-Probleme, verwenden Sie nur, wenn Sie keine andere Wahl haben ( siehe meine Kommentare). Stattdessen DrColossos Antwort ist eine beste Weg, dies zu tun... bitte akzeptieren sein als Antwort
- Dies ist eindeutig nicht eine doppelte. Wenn Weg wird die syntax beschrieben wurde, diese Frage war tatsächlich umgesetzt werden in MongoDB eines Tages, wir würden es nie finden Sie die Antworten zu der anderen Frage, wie Sie bitten, für zwei völlig verschiedene Dinge (Vergleich der Datums-Eigenschaften und finden, die innerhalb der Zeitspanne). Die Lösungen, die zufällig die gleichen, aber Sie haben nicht zu, und könnte theoretisch (und vielleicht einige Tag) variieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Daten gespeichert sind timestamp-format. Wenn Sie möchten, dass alles, was gehört zu einem bestimmten Monat, Abfrage für den start und das Ende des Monats.
end
um sicherzustellen, dass alle 31 Tage enthalten sind. Btw,month=11
ist Dezember, nicht November. Die Op scheint zu beziehen sich auf Nov.end = new Date(2010, 12, 01)
?Können Sie nicht direkt Abfrage, mongodb Sammlungen von Komponenten Datum wie Tag oder Monat. Aber es ist möglich, durch die Verwendung der speziellen $, wo javascript-Ausdruck
oder einfach
(Aber ich bevorzuge die erste)
Lesen Sie den nachfolgenden shell-Befehle aus, um die Teile des Datums
EDIT:
Verwenden, $wobei nur dann, wenn Sie keine andere Wahl haben. Es kommt mit der performance-Probleme. Bitte schauen Sie sich die untenstehenden Kommentare von @kamaradclimber und @dcrosta. Ich lasse diesen Beitrag offen, damit die anderen Leute Holen Sie sich die Fakten über Sie.
und schauen Sie sich den link $where-Klauseln und Funktionen in Abfragen für mehr info
mongod
Instanz hat nur einen javascript-Kontext, in dem beliebige javascript ($where
, map-reduce-jobs, etc). Abfragen wird der Ertrag periodisch, so dass eine Abfrage nicht komplett sperren, sondern mehrere Abfragen oder eine andere javascript-arbeiten langsamer. Dies ist der Grund, warum$where
wird nicht empfohlen.wie etwa die Speicherung der Monat, in der eigenen Immobilie, da muss man die Anfrage für Sie? weniger elegant, als
$where
, aber wahrscheinlich besser, da es indiziert werden kann.Wenn Sie möchten, um Dokumente zu suchen, die gehören zu einem bestimmten Monat, stellen Sie sicher, um die Abfrage wie diese:
Vermeiden, quering, wie unten, so viel wie möglich.
Kann eine Aggregat-Betrieb mit der
Aggregat()
Funktion, nimmt in einer$schwärzen
- pipeline, nutzt die Datum Aggregation Betreiber in dem Zustand Ausdruck:Für die andere Anfrage
Mit ODER
Mit UND
Den
$schwärzen
Betreiber integriert die Funktionalität von$project
und$match
pipeline und liefern alle Unterlagen, die den Bedingungen entsprechen, unter Verwendung$$BEHALTEN
und Ausschuss aus der pipeline diejenigen, die nicht übereinstimmen mit der$$PRUNE
variable.Finden Sie aufzeichnen von Tag, Monat, Jahr usw. von Daten durch Datum Aggregation Betreiber, wie $dayOfYear, $dayOfWeek, $Monat, $Jahr etc.
Als ein Beispiel, wenn Sie wollen alle Aufträge, die im April 2016 können Sie verwenden Sie die folgende Abfrage.
Hier ist ein Datum Feld in Dokumenten und $$ROOT wir übergeben alle anderen Feld-Projekt in die nächste Phase, und geben Sie uns alle Details der Dokumente.
Optimieren Sie obige Abfrage wie pro Ihre Notwendigkeit, es ist nur ein Beispiel geben. Mehr wissen über Datum Aggregation Betreiber, besuchen der link.
Können Sie MongoDB_DataObject wrapper um solche Abfrage, wie unten:
ODER, ähnlich, mit der direkten Abfrage string: