R:按时间戳查询MongoDB(使用mongolite)

时间:2016-05-23 22:54:10

标签: r mongodb mongolite

我有一个相当大的Mongo数据库,它基于timestamp编制索引。数据库中的每个时间戳都按以下方式构建:

"timestamp" : ISODate("2016-05-22T17:05:22.000Z")

我是R用户,我正在尝试根据每个条目的时间戳查询数据库。具体来说,我想检索时间戳大于我指定的某个日期的所有条目。我目前正在使用mongolite包来通过R查询MongoDB但是没有成功。

以下是我用于检索起诉mongolite的数据的查询示例:

library(mongolite)

mongo <- mongolite::mongo(url = "mongodb://localhost:27017", 
                      collection = "testCol", 
                      db = "testDB")

fmt <- '%Y-%m-%dT%H:%M:%S.000Z'

rawData <- mongo$find(query = paste0('{
                                       "timestamp" : { 
                                                      "$gte" : "ISODate(', format(Sys.time() - (60 * 60 * 24), fmt),')", 
                                                      "$lt" : "ISODate(', format(Sys.time(), fmt),')" 
                                                     } 
                                      }'))

请注意,我正在格式化时间和日期以与上面的MongoDB格式保持一致,并且我试图在过去24小时内提取所有条目。我还在实际查询中添加了一些字段,但未在此处包含它们。

此查询是否存在明显错误?

1 个答案:

答案 0 :(得分:3)

您需要将日期转换为numberLong,并在该

上进行查询
d <- as.integer(Sys.time()) * 1000

rawData <- mong$find(paste0('{"timestamp":{"$gte": { "$date" : { "$numberLong" : "', d, '" } } } }'))

我有very similar question

请参阅mongolite github网站上的this thread