Abfragen von MongoDB-Datumsbereichen mit Go und Mgo
Bei der Arbeit mit MongoDB-Sammlungen, die Datumsangaben speichern, ist es wichtig zu verstehen, wie die darin enthaltenen Daten abgefragt werden angegebene Datumsbereiche. Dieser Artikel befasst sich mit einem Abfrageproblem, das bei der Verwendung von Golang und Mgo auftritt.
Die Beispiel-MongoDB-Sammlung mit dem Namen „my_sales“ enthält Dokumente mit Feldern wie „product_name“, „price“ und „sale_date“, dargestellt als ISODates. Das Ziel besteht darin, Verkaufsdatensätze abzurufen, die in einen bestimmten Datumsbereich fallen.
In der MongoDB-Shell sieht die Abfrage so aus:
db.my_sales.find({ sale_date: { $gt: ISODate("2014-11-04"), $lt: new ISODate("2014-11-05") });
Allerdings, wenn versucht wird, dieselbe Abfrage auszuführen In Golang mit dem Mgo-Treiber gibt der folgende Code keine Ergebnisse zurück:
var sales_his []Sale err := c.Find(bson.M{"sale_date": bson.M{ "$gt": "ISODate("+date_from+")", "$lt": "ISODate("+date_to+")" } }).All(&sales_his)
Das Problem liegt in der Art und Weise, wie Mgo mit BSON-Daten umgeht. Für Go-Strukturen sollte time.Time für Datumsfelder verwendet werden. Daher sollte die Sale-Struktur wie folgt definiert sein:
type Sale struct { ProductName string `bson:"product_name"` Price int `bson:"price"` SaleDate time.Time `bson:"sale_date"` }
Mit dieser aktualisierten Struktur lautet die korrekte Abfrage in Golang:
fromDate := time.Date(2014, time.November, 4, 0, 0, 0, 0, time.UTC) toDate := time.Date(2014, time.November, 5, 0, 0, 0, 0, time.UTC) var sales_his []Sale err = c.Find( bson.M{ "sale_date": bson.M{ "$gt": fromDate, "$lt": toDate, }, }).All(&sales_his)
Das obige ist der detaillierte Inhalt vonWie frage ich MongoDB-Datumsbereiche mit Go und Mgo ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!