>백엔드 개발 >Golang >Go 및 Mgo를 사용하여 MongoDB 날짜 범위를 쿼리하는 방법은 무엇입니까?

Go 및 Mgo를 사용하여 MongoDB 날짜 범위를 쿼리하는 방법은 무엇입니까?

DDD
DDD원래의
2024-11-08 14:06:02694검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.