2014-11-06 8 views
8

Hallo Ich habe eine Sammlung namens "my_sales" mit Feldern Produktname, Preis, Verkaufsdatum.Wie kann ich MongoDB mit Datumsbereich mit Mgo und Go abfragen?

Mein Arzt sieht aus wie

{ 
    "_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") 
} 

ich in Mongo Shell versucht, wie diese

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

Es das richtige Ergebnis zu geben. Jetzt brauche ich gleiche Sache mit golang Ich mag dieses

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

Sein geben null Ergebnis bitte helfen

Antwort

20

mgo unterstützt time.Time für BSON Termine versucht abzufragen.

Also, wenn Ihr struct sieht wie folgt aus:

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

Dann können Sie es wie folgt abfragen:

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) 
0

Ich habe neue Art und Weise Datumsbereich abfragen:

// 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}} 

Dies wird Ihre Anfrage beschleunigen.