Wie kann convert string to date mit mongo-aggregation?
In einer Sammlung Lagere ich diese Art von Dokument
{
"_id" : 1,
"created_at" : "2016/01/01 12:10:10",
...
}.
{
"_id" : 2,
"created_at" : "2016/01/04 12:10:10",
...
}
Ich möchte Dokumente finden, haben "creared_at" > 2016/01/01 durch die Verwendung von aggregation pipeline.
Jemand die Lösung zu konvertieren "created_at" Stand, damit kann conpare aggregation?
Es gibt keinen Weg, um konvertieren von Zeichenfolgen in Datumsangaben, aggregation pipeline, während das Datum zu string sein könnte. Sie können trick: erstellen Sie eine Kopie Ihrer Sammlung und speichern
Sie nicht wirklich brauchen, zu konvertieren, die etwas für Ihre Abfrage;
es funktionieren so gut, dass ich nicht erkennen kann. ich danke Ihnen so sehr
created_at
als Isodatum, und dann vergleichen, Termine...Sie nicht wirklich brauchen, zu konvertieren, die etwas für Ihre Abfrage;
{created_at: {$gt: '2016/01/01'}}
würde funktionieren hier, weil Ihre string-format unterstützt aussagekräftigen Vergleich.es funktionieren so gut, dass ich nicht erkennen kann. ich danke Ihnen so sehr
InformationsquelleAutor user1697646 | 2016-01-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie erwähnt haben, müssen Sie zuerst ändern Sie das schema so, dass die
created_at
Feld enthält Datum-Objekte im Gegensatz zu string-wie ist die aktuelle situation, dann können Sie Abfrage Ihre Sammlung entweder über diefind()
- Methode oder die aggregation framework. Ersteres wäre wohl der einfachste Ansatz.Konvertieren
created_at
Feld "bis Datum", benötigen Sie zum Durchlaufen der cursor wieder durch denfind()
Methode mit derforEach()
Methode, innerhalb der Schleife umwandeln dercreated_at
Feld, um ein Datum-Objekt und aktualisieren Sie das Feld mit der$Satz
Betreiber.Nutzen der Verwendung der Bulk-API für bulk-updates, die bieten eine bessere performance als Sie senden die Operationen auf dem server in den Reihen von sagen wir 1000, das gibt Ihnen eine bessere Leistung, wie Sie nicht senden jede Anfrage an den server, nur einmal alle 1000 Anfragen.
Folgenden veranschaulicht diesen Ansatz, der im ersten Beispiel wird der Bulk-API verfügbar in MongoDB Versionen
>= 2.6 and < 3.2
. Es aktualisiert alledie Dokumente in der Kollektion durch die änderung der
created_at
Felder für Datum Felder:Nächsten Beispiel gilt für die neue MongoDB-version
3.2
die seit veraltet die Bulk-API und ein neuer Satz von apis, die mitbulkWrite()
:Einmal die schema-änderung ist abgeschlossen, Sie können dann die Abfrage Ihrer Sammlung für das Datum:
Und sollten Sie wünschen, um die Abfrage mithilfe der aggregation-framework, führen Sie das folgende pipeline, um das gewünschte Ergebnis zu erhalten. Es verwendet die
$match
Betreiber, die ähnlich wie diefind()
Methode:InformationsquelleAutor chridam
Alle oben genannten Antworten verwenden
cursors
aber, mongodb, immer empfehlen die Verwendungaggregation
pipeline. Mit der neuen$dateFromString
immongodb 3.6
, seine ziemlich einfach.https://docs.mongodb.com/manual/reference/operator/aggregation/dateFromString/
InformationsquelleAutor N Raghu
Wenn wir Dokumente:
Einfache Abfrage:
Aggregat-Abfrage:
Mehr Informationen über die Art der Datum hier und hier
InformationsquelleAutor alex10