Ich habe herumgespielt, um Tweets in Mongodb zu speichern. Jedes Objekt sieht folgendermaßen aus:
{
"_id" : ObjectId("4c02c58de500fe1be1000005"),
"contributors" : null,
"text" : "Hello world",
"user" : {
"following" : null,
"followers_count" : 5,
"utc_offset" : null,
"location" : "",
"profile_text_color" : "000000",
"friends_count" : 11,
"profile_link_color" : "0000ff",
"verified" : false,
"protected" : false,
"url" : null,
"contributors_enabled" : false,
"created_at" : "Sun May 30 18:47:06 +0000 2010",
"geo_enabled" : false,
"profile_sidebar_border_color" : "87bc44",
"statuses_count" : 13,
"favourites_count" : 0,
"description" : "",
"notifications" : null,
"profile_background_tile" : false,
"lang" : "en",
"id" : 149978111,
"time_zone" : null,
"profile_sidebar_fill_color" : "e0ff92"
},
"geo" : null,
"coordinates" : null,
"in_reply_to_user_id" : 149183152,
"place" : null,
"created_at" : "Sun May 30 20:07:35 +0000 2010",
"source" : "web",
"in_reply_to_status_id" : {
"floatApprox" : 15061797850
},
"truncated" : false,
"favorited" : false,
"id" : {
"floatApprox" : 15061838001
}
Wie würde ich eine Abfrage schreiben, die das created_at überprüft und alle Objekte zwischen 18:47 und 19:00 findet? Muss ich meine Dokumente aktualisieren, damit die Daten in einem bestimmten Format gespeichert werden?
2010-04-29T00:00:00.000Z
viel einfacher als das Berechnen des gleichen Datums / der gleichen Uhrzeit in Millisekunden. Sie können auch ganz einfach Zeitzonen konvertieren. Außerdem behandeln Daten bereits Dinge wie Schalttage, Schaltsekunden und andere Kuriositäten, die Sie normalerweise nicht selbst behandeln möchten.Antworten:
Das Abfragen eines Datumsbereichs (bestimmter Monat oder Tag)imMongoDB-Kochbuchenthält eine sehr gute Erklärung zu diesem Thema, aber im Folgenden habe ich es selbst ausprobiert und es scheint zu funktionieren.Basierend auf meinen Experimenten müssen Sie Ihre Daten in ein von MongoDB unterstütztes Format serialisieren, da das Folgende unerwünschte Suchergebnisse ergab.
Im zweiten Beispiel wurden keine Ergebnisse erwartet, aber es wurde immer noch eines erhalten. Dies liegt daran, dass ein grundlegender Zeichenfolgenvergleich durchgeführt wird.
quelle
Zu klären. Es ist wichtig zu wissen, dass:
Hier ist ein funktionierender Codeausschnitt, in dem wir ein wenig Datumsmanipulation durchführen, um sicherzustellen, dass Mongo (hier verwende ich das Mungo-Modul und möchte Ergebnisse für Zeilen, deren Datumsattribut kleiner als (vor) dem als myDate-Parameter angegebenen Datum ist) verarbeiten kann es richtig:
quelle
MongoDB speichert die Millis eines Datums tatsächlich als int (64), wie von http://bsonspec.org/#/specification vorgeschrieben
Es kann jedoch ziemlich verwirrend werden, wenn Sie Daten abrufen, da der Client-Treiber ein Datumsobjekt mit seiner eigenen lokalen Zeitzone instanziiert. Der JavaScript-Treiber in der Mongo-Konsole wird dies sicherlich tun.
Wenn Sie sich also für Ihre Zeitzonen interessieren, stellen Sie sicher, dass Sie wissen, was es sein soll, wenn Sie es zurückerhalten. Dies sollte für die Abfragen nicht so wichtig sein, da es immer noch dem gleichen int (64) entspricht, unabhängig davon, in welcher Zeitzone sich Ihr Datumsobjekt befindet (ich hoffe). Aber ich würde definitiv Abfragen mit tatsächlichen Datumsobjekten (nicht mit Zeichenfolgen) durchführen und den Treiber seine Sache machen lassen.
quelle
Python und
pymongo
Suchen von Objekten zwischen zwei Daten in Python mit
pymongo
in der Sammlungposts
(basierend auf dem Tutorial ):Wobei
{"$gte": from_date, "$lt": to_date}
der Bereich in Bezug aufdatetime.datetime
Typen angegeben wird.quelle
Ersetzen Sie
collection
durch den Namen der Sammlung, die Sie abfragen möchtenquelle
Verwenden Sie diesen Code, um den Datensatz zwischen zwei Daten mit
$gte
und zu finden$lt
:quelle
Verwenden mit Moment.js und Vergleichsabfrageoperatoren
quelle
Konvertieren Sie Ihre Daten in die GMT-Zeitzone, während Sie sie in Mongo einfügen. Auf diese Weise gibt es nie ein Zeitzonenproblem. Berechnen Sie dann einfach das Feld Twitter / Zeitzone, wenn Sie die Daten zur Präsentation zurückziehen.
quelle
Warum nicht die Zeichenfolge in eine Ganzzahl der Form JJJJMMTTHHMMSS konvertieren? Jedes Zeitinkrement würde dann eine größere Ganzzahl erzeugen, und Sie können nach den Ganzzahlen filtern, anstatt sich Gedanken über die Konvertierung in ISO-Zeit zu machen.
quelle
Verwenden Sie $ gte und $ lte , um zwischen Datumsdaten in Mongodb zu suchen
quelle
Sie können dies auch überprüfen. Wenn Sie diese Methode verwenden, verwenden Sie die Analysefunktion, um Werte aus der Mongo-Datenbank abzurufen:
quelle
quelle
Sie können dies auch überprüfen oder versuchen, anstatt Aggregat zu verwenden
quelle
Ich habe in diesem Modell versucht, gemäß meinen Anforderungen ein Datum zu speichern, wenn ein Objekt später erstellt wird. Ich möchte alle Datensätze (Dokumente) zwischen zwei Daten in meiner HTML-Datei abrufen. Ich habe das folgende Format verwendet: MM / TT / JJJJ
in meiner py (python) datei habe ich es folgendermaßen in "iso fomate" konvertiert
und in meiner dbmongo-Sammlung mit "SelectedDate" als Feld in meiner Sammlung gespeichert
Um Daten oder Dokumente zwischen bis zu 2 Daten abzurufen, habe ich folgende Abfrage verwendet
quelle