首页 > 后端开发 > Golang > 如何使用 Go 和 Mgo 查询 MongoDB 日期范围?

如何使用 Go 和 Mgo 查询 MongoDB 日期范围?

DDD
发布: 2024-11-08 14:06:02
原创
689 人浏览过

How to Query MongoDB Date Ranges Using Go and Mgo?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板