2016-08-17 123 views
0

我有一個mongodb集合,我試圖限制結果集,但數據是由其他人創建的,日期格式似乎存儲爲「2016-05-12 00:00 :00.000Z」。我不確定如何格式化查找查詢來限制這種類型的日期。我用其他類型的日期格式取得了成功,但不是這一次。有其他人遇到過這個問題嗎?mongodb golang限制結果的日期

myCollection { 
    "_id" : { 
    "$oid" : bson.ObjectId 
    }, 
    "createdDate" : { 
    "$date" : Date 
} 

這是我試過的。

toDate := time.Date(time.Now().Year(), time.Now().Month(), time.Now().Day(), 0, 0, 0, 0, time.UTC) 
fromDate := toDate.AddDate(0, 0, -1) 

collectionResult := collectionRecords.Find(bson.M{"retailer": result.Id, "createdAt": bson.M{"$gte": fromDate}}) 

最後,我想限制到一天,試圖做到以下幾點:

collectionResult := collectionRecords.Find(bson.M{"retailer": result.Id, "createdAt": bson.M{"$gte": fromDate, "$lt": toDate}}) 
collectionResult.All(&collectionData) 
collectionCount, _ := collectionResult.Count() 
fmt.Println("Count: ", collectionCount) 

它總是返回0。就像我上面說我已經成功與UTC日期,但這個似乎困擾着我。

+0

您是否問過如何創建time.Time過去24小時以及UTC,可能會截斷時間?或者你問如何解析時間戳字符串?或者如何篩選將時間戳存儲爲字符串的記錄? – baloo

+0

我知道如何創建一個timeStamp,但是time.Time對象要麼使用time.Local要麼是time.UTC,這個值既不是。所以,當我試圖限制mongodb結果集時,看起來沒有記錄。如果日期存儲爲UTC或本地,那麼這將是一個簡單的解決方案。 如何讓mongodb在執行$ gte或$ lt調用時忽略時間戳記是我正在尋找的。 – CRob

+0

「祖魯語時區通常用於航空和軍事中,作爲UTC +0的另一個名稱」。所以有效的日期你看到的是UTC時間戳,最後'Z'表示這是你所擁有的。 – baloo

回答

0

如果我理解了這個問題,那麼您正在尋找如何在過去的24小時內創建UTC時間戳,其中小時已被截斷?

您可以嘗試在這些日期過濾:

package main 

import (
    "fmt" 
    "time" 
) 

func main() { 
    today := time.Now().Truncate(24*time.Hour).UTC() 
    yesterday := today.Add(-24*time.Hour) 
    fmt.Println(today) 
    fmt.Println(yesterday) 
} 
+0

感謝您的答案,但那不是我正在尋找的。我試圖弄清楚如何讓mongo在運行日期比較查詢時忽略時間戳。 – CRob

0

在上述職位的代碼實際工作,爲「祖魯」日期時間戳。這是一個非問題。