2016-08-17 73 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

在上述职位的代码实际工作,为“祖鲁”日期时间戳。这是一个非问题。