2014-11-06 9 views
8

Ciao, ho una collezione denominata "my_sales" con campi nome_prodotto, prezzo, data_di vendita.Come posso interrogare MongoDB con l'intervallo di date usando mgo e Go?

mio doc sembra

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

ho provato in mongo shell come questo

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

E dare il risultato corretto. Ora ho bisogno di interrogare stessa cosa usando golang ho provato come questo

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

sua dando risultato nullo si prega di aiuto

risposta

20

mgo supporta time.Time per le date di BSON.

Così, se lo struct assomiglia a questo:

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

Poi si può interrogare in questo modo:

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

devo nuovo modo di interrogare intervallo di date:

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

Questo velocizzerà la tua richiesta.