首頁  >  文章  >  後端開發  >  如何使用 Go 和 Mgo 查詢 MongoDB 日期範圍?

如何使用 Go 和 Mgo 查詢 MongoDB 日期範圍?

DDD
DDD原創
2024-11-08 14:06:02564瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn