ホームページ >バックエンド開発 >Golang >Go と Mgo を使用して MongoDB の日付範囲をクエリする方法は?

Go と Mgo を使用して MongoDB の日付範囲をクエリする方法は?

DDD
DDDオリジナル
2024-11-08 14:06:02631ブラウズ

How to Query MongoDB Date Ranges Using Go and Mgo?

Go と Mgo を使用した MongoDB の日付範囲のクエリ

日付を格納する MongoDB コレクションを操作する場合、そのコレクション内のデータをクエリする方法を理解することが重要です。指定された日付範囲。この記事では、Golang と Mgo の使用時に発生するクエリの問題について説明します。

「my_sales」という名前のサンプル MongoDB コレクションには、ISODates で表される「product_name」、「price」、「sale_date」などのフィールドを持つドキュメントが含まれています。目的は、特定の日付範囲内にある販売レコードを取得することです。

MongoDB シェルでは、クエリは次のようになります。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。