Ist es möglich, ein bestimmtes Datum abzufragen?
Ich fand in dem Mongo - Kochbuch , dass wir es für einen Bereich tun können Querying für einen Datumsbereich wie folgt aus:
db.posts.find({"created_on": {"$gte": start, "$lt": end}})
Aber ist es für ein bestimmtes Datum möglich? Das funktioniert nicht:
db.posts.find({"created_on": new Date(2012, 7, 14) })
... 5+ Jahre später empfehle ich dringend, stattdessen date-fns zu verwenden
Für diejenigen von uns, die Moment.js verwenden
Wichtig: Alle Momente sind veränderlich !
tomorrow = today.add(1, 'days')
funktioniert nicht, da es auch mutierttoday
. Das Aufrufenmoment(today)
löst dieses Problem durch implizites Klonentoday
.quelle
.startOf('day')
anstelle von .hours (0) .minutes (0) .seconds (0) zu verwenden. Die erste Zeile wäre also:var today = moment().startOf('day')
moment(today)
, um das Objekt zu klonen, ist eine andere Lösung:var tomorrow = today.clone().add(1, 'days')
$lt
:moment(today).endOf('day')
. Um zu verhindern, dass tatsächliche Ergebnisse vom nächsten Tag aufgenommen werden.moment(today).endOf('day')
gibt der gleiche Tag mit der Zeit von :23:59:59.999
. Sieht also tatsächlich korrekter aus$lte
, da sonst Objekte zu diesem bestimmten Zeitpunkt ignoriert werden.Ja, das Datumsobjekt erfasst Datum und Uhrzeit, sodass ein Vergleich mit nur dem Datumswert nicht funktioniert.
Sie können einfach den Operator $ where verwenden , um eine komplexere Bedingung mit einem booleschen Javascript-Ausdruck auszudrücken :)
created_on
ist das Datum / Uhrzeit-Feld und2012-07-14
ist das angegebene Datum.Das Datum sollte genau im Format JJJJ-MM-TT vorliegen.
Hinweis: Verwenden Sie
$where
sparsam, es hat Auswirkungen auf die Leistung.quelle
Hast du es versucht:
Das Problem, auf das Sie stoßen werden, ist, dass Datumsangaben in Mongo als Zeitstempel gespeichert werden. Um also mit einem Datum übereinzustimmen, bitten Sie es, mit einem Zeitstempel übereinzustimmen. In Ihrem Fall denke ich, dass Sie versuchen, einen Tag abzugleichen (dh von 00:00 bis 23:59 an einem bestimmten Datum). Wenn Ihre Daten ohne Zeiten gespeichert sind, sollten Sie in Ordnung sein. Versuchen Sie andernfalls, Ihr Datum als Zeitbereich am selben Tag anzugeben (dh Start = 00: 00, Ende = 23: 59), wenn gte nicht funktioniert.
ähnliche Frage
quelle
$gte
stattdessen habengte
, wäre es besser.Sie können den folgenden Ansatz für die API-Methode verwenden, um Ergebnisse von einem bestimmten Tag zu erhalten:
quelle
Wir hatten ein Problem mit doppelten Daten in unserer Datenbank, mit einem Datumsfeld mit mehreren Werten, bei denen wir 1 haben sollten. Ich dachte, ich würde die Art und Weise hinzufügen, wie wir das Problem als Referenz gelöst haben.
Wir haben eine Sammlung namens "Daten" mit einem numerischen Feld "Wert" und einem Feld "Datum" Datum. Wir hatten einen Prozess, den wir für idempotent hielten, der jedoch beim zweiten Durchlauf 2 x Werte pro Tag hinzufügte:
Wir brauchen nur einen der beiden Datensätze, mussten also das Javascript verwenden, um die Datenbank zu bereinigen. Unser ursprünglicher Ansatz bestand darin, die Ergebnisse zu durchlaufen und alle Felder mit einer Zeit zwischen 6 und 11 Uhr zu entfernen (alle Duplikate waren am Morgen), aber während der Implementierung eine Änderung vorzunehmen. Hier ist das Skript, mit dem das Problem behoben wurde:
und dann lief es mit
mongo thedatabase fixer_script.js
quelle