【问题标题】:How to query date data with millisecond through mongolite?如何通过mongolite查询毫秒级的日期数据?
【发布时间】:2017-08-21 09:54:35
【问题描述】:

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

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

【问题讨论】:

  • 如果您可以使用文字代替,请避免使用屏幕截图,并请提供minimal reproducible example。另见stackoverflow.com/questions/5963269/…
  • 截图是mongo和R中查询数据的结果,是结构化数据,很难转成文本。
  • 您可以在大约 30 秒内输入任一屏幕截图中的数据。让您的问题成为对其他人有用的资源:这就是 SO 的工作原理。
  • 感谢您的提示,我已经重新编辑了我的问题的描述。那你有什么想法吗?

标签: r mongodb mongolite


【解决方案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\"}}}]')

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

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

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

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

原谅我英语不好~()~

【讨论】:

    猜你喜欢
    • 2016-03-30
    • 2014-10-12
    • 1970-01-01
    • 2018-08-21
    • 2017-10-06
    • 2021-09-16
    • 2021-02-02
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多