我有以下代码从我的mongodb中检索一些数据 -
currentDate := time.Now().Format(time.RFC3339)
content := database.FindDocuments("content", bson.M{ "$and": []bson.M{ bson.M{"start_date": bson.M{"$lte": currentDate}}, bson.M{"end_date": bson.M{ "$gte": currentDate}}, }})
FindDocuments基本上MgoSession.DB(Dbname).C(collectionName).Find(query).All(&result)
给了我一个[]map[string]interface{}
。
这给了我null,而在mongo控制台中(使用与currentDate变量返回的值相同) -
{ "start_date": { $lt: ISODate("2016-09-08T13:05:24+05:30") }, $and: [ { "end_date": { $gt: ISODate("2016-09-08T13:05:24+05:30") } } ] }
返回我 -
{
"_id" : ObjectId("57cff2bc32291a1fa0e79e90"),
"image_url" : "www.example.com",
"title" : "This is a new content",
"start_date" : ISODate("2016-09-06T10:58:54.701+0000"),
"end_date" : ISODate("2016-09-10T10:59:04.447+0000"),
"type" : "content"
}
尽管使用了正确的时间格式,为什么会出现此问题?
答案 0 :(得分:2)
mgo驱动程序似乎很聪明,可以正确转换time.Time到mongo Date所以只是
currentDate := time.Now()
应该有效。另外gopkg.in/mgo.v2/bson有帮手可以获得mongo使用的毫秒精度时间
func Now() time.Time
所以
currentDate := bson.Now()
这个辅助函数有简单的源
return time.Unix(0, time.Now().UnixNano()/1e6*1e6)
这样任何Go时间戳time.Time都可以以毫秒
获得someDate := time.Unix(0, time.someTime.UnixNano()/1e6*1e6)