使用Go 和Mgo 查詢MongoDB 日期範圍
使用儲存日期的MongoDB 集合時,了解如何查詢其中的資料至關重要指定的日期範圍。本文解決了使用 Golang 和 Mgo 時遇到的查詢問題。
名為“my_sales”的範例 MongoDB 集合的文件的欄位包括“product_name”、“price”和“sale_date”,表示為 ISODates。目標是檢索特定日期範圍內的銷售記錄。
在MongoDB shell 中,查詢如下所示:
db.my_sales.find({ sale_date: { $gt: ISODate("2014-11-04"), $lt: new ISODate("2014-11-05") });
但是,當嘗試執行相同的查詢時在使用Mgo 驅動程式的Golang 中,以下程式碼不傳回任何結果:
var sales_his []Sale err := c.Find(bson.M{"sale_date": bson.M{ "$gt": "ISODate("+date_from+")", "$lt": "ISODate("+date_to+")" } }).All(&sales_his)
問題在於Mgo 處理BSON 日期的方式。對於 Go 結構體,應將 time.Time 用於日期欄位。因此,Sale 結構體應定義如下:
type Sale struct { ProductName string `bson:"product_name"` Price int `bson:"price"` SaleDate time.Time `bson:"sale_date"` }
使用此更新的結構體,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)
以上是如何使用 Go 和 Mgo 查詢 MongoDB 日期範圍?的詳細內容。更多資訊請關注PHP中文網其他相關文章!