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