如何通过mongolite以毫秒查询日期数据?

时间:2017-03-28 10:51:20

标签: r mongodb mongolite

如下所示,'stime'和'etime'的类型是'Date',以毫秒为单位:

{
"_id" : ObjectId("58d843dd4da8fc62c8c6a0bd"),
"stime" : ISODate("2017-03-26T22:21:34.923Z"),
"etime" : ISODate("2017-03-26T22:42:17.341Z"),
}

我查询了这样的数据:

data.names<-c("stime","etime")
mongo.data <- mongo(collection = "data_1",db = "data_test", 
                    url = "mongodb://10.23.102.122:32800")
journey <- mongo.data$find(query = '{\"_id\" : {\"$oid\":\"58d843dd4da8fc62c8c6a0bd\"}}', 
                           fields = paste('{\"_id\":true, ', 
                                          paste('\"',data.names,'\":true', collapse = ', ', sep=''), 
                                          '}', sep = ''))

但查询的数据是没有毫秒数据的UTC时间戳:

> journey
                       _id      stime      etime
1 58d843dd4da8fc62c8c6a0bd 1490566894 1490568137
> format(as.POSIXct(unlist(journey[1,-1]), origin = "1970-01-01 00:00:00"), format="%Y-%m-%d %H-%M-%OS3")
                    stime                     etime 
"2017-03-27 06-21-34.000" "2017-03-27 06-42-17.000" 

那么,我如何用毫秒数据查询数据呢?

1 个答案:

答案 0 :(得分:1)

我通过mongo聚合方法找到了解决方案:

 journey <- mongo.data$aggregate(pipeline = '[{\"$match\":{\"_id\":{\"$oid\":\"58d843dd4da8fc62c8c6a0bd\"}}}, {\"$project\":{\"_id\":1, \"stime\":1, \"stime_milliseconds\":{\"$millisecond\":\"$stime\"}, \"etime\":1, \"etime_milliseconds\":{\"$millisecond\":\"$etime\"}}}]')

在上面的代码中,我提取了&#39; stime&#39;的毫秒数据。并且&#39; etime&#39;作为两个新变量&#39; stime_milliseconds&#39;和&#39; etime_milliseconds&#39;使用“毫秒”&#39; mongo中的方法。然后通过R从mongo中提取数据,如下所示:

> journey
                       _id      stime      etime stime_milliseconds etime_milliseconds
1 58d843dd4da8fc62c8c6a0bd 1490566894 1490568137                923                341

最后两个数字代表毫秒数据。

这是我的解决方案,欢迎更好的回答

原谅我可怜的英语〜()〜