使用 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中文网其他相关文章!