How can I query MongoDB with a date range using mgo and Go?

Hi I have a collection named "my_sales" with the field product_name, price, sale_date.

My document looks like

{ "_id" : ObjectId("5458b6ee09d76eb7326df3a4"), "product_name" : product1, "price" : 200, "sale_date" : ISODate("2014-11-04T11:22:19.589Z") } { "_id" : ObjectId("5458b6ee09d76eb7326df3a4"), "product_name" : product1, "price" : 200, "sale_date" : ISODate("2014-11-04T11:22:19.589Z") } { "_id" : ObjectId("5458b6ee09d76eb7326df3a4"), "product_name" : product1, "price" : 200, "sale_date" : ISODate("2014-11-04T11:22:19.589Z") } { "_id" : ObjectId("5458b6ee09d76eb7326df3a4"), "product_name" : product1, "price" : 200, "sale_date" : ISODate("2014-11-05T11:22:19.589Z") } 

I tried in a mongo shell like this

  db.my_sales.find({ sale_date: { $gt: ISODate("2014-11-04"), $lt: new ISODate("2014-11-05") }); 

This gives the correct result. Now I need to request the same using golang I tried like this

  var sales_his []Sale err := c.Find(bson.M{"sale_date":bson.M{ "$gt": "ISODate("+date_from+")", "$lt": "ISODate("+date_to+")" } }).All(&sales_his) 

It gives a null result, please help

+8
mongodb go mgo
source share
2 answers

mgo supports time. Time for BSON dates.

So, if your structure looks like this:

 type Sale struct { ProductName string `bson:"product_name"` Price int `bson:"price"` SaleDate time.Time `bson:"sale_date"` } 

Then you can query it like this:

 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) 
+20
source share

I have a new way to request a date range:

 // convert to date fromTime := time.Unix(1509358405981/1000, 0) // Convert date to ObjectID with time fromObjectBson := bson.NewObjectIdWithTime(fromTime) // condition bson.M{"_id":bson.M{"$gt": fromObjectBson}} 

This will speed up your request.

0
source share

All Articles