1

如下,'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" 

那么,如何查询毫秒级的数据呢?

4

1 回答 1

2

我通过 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\"}}}]')

在上面的代码中,我使用 mongo 中的 'millisecond' 方法将 'stime' 和 'etime' 的毫秒数据提取为两个新变量 'stime_milliseconds' 和 'etime_milliseconds'。然后通过R从mongo中提取数据,如下:

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

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

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

原谅我英语不好~()~

于 2017-03-31T11:46:17.920 回答