2016-09-08 5 views
0

を見逃す失敗したMgO -Golang +は時間を使用しているときにMongoDBを照会することは、私は私のMongoDBからいくつかのデータを取得するには、次のコードを持っているので、「ISODate」

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を私に[]map[string]interface{}を与える基本的にMgoSession.DB(Dbname).C(collectionName).Find(query).All(&result)です。

(CURRENTDATE変数によって返された値と同じ値を使用して)Mongoのコンソールでのに対し、これは、私にはnullを与える -

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

なぜこの問題が来ています正しい時刻形式を使用していますか?ただ

currentDate := time.Now() 

が動作するはずですので

答えて

1

MgOのドライバが日付をモンゴように正しくtime.Timeを変換するのに十分なスマートなようです。またgopkg.in/mgo.v2/bsonはそう

currentDate := bson.Now() 

このヘルパー関数は、単純なソース

return time.Unix(0, time.Now().UnixNano()/1e6*1e6) 

これを持って

func Now() time.Time 

を使用モンゴミリ秒の精度で時間を取得するためのヘルパーを持っていますway any Goタイムスタンプ時間。ミリ秒単位で取得できます。

someDate := time.Unix(0, time.someTime.UnixNano()/1e6*1e6) 
+0

こんにちは!それは正確に日付を取得しないことではありません。 mongoコンソールのクエリでは、私は自分のプログラムコンソールから見たcurrentDateによって返された値を貼り付けてコピーしただけです。 この値を使用する場合、返される時間値は1473326105000であり、応答はまだNULLです。 –

+0

{"start_date":{$ lt:1473326105000}、$ and:{{"end_date":{$ gt:1473326105000}}}はコンソールで動作しますか?多分、mongoのドキュメントはミリ秒ほど間違っているかもしれません。 Unix()またはコンソール{"start_date":{$ lt:1473326105}、$ and:{{"end_date":{$ gt:1473326105}}} – Uvelichitel

+0

の両方について、currentDate:= time.Now()これらは、mongoコンソールでヌルを返す:( –

関連する問題