首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R mongolite日期查询

R mongolite日期查询
EN

Stack Overflow用户
提问于 2015-12-24 14:09:18
回答 4查看 6.6K关注 0票数 3

问题

如何使用mongolite包在R中查询给定日期的数据库?

示例数据

考虑一个包含两个条目的test集合

代码语言:javascript
复制
library(mongolite)

## create dummy data
df <- data.frame(id = c(1,2),
                 dte = as.POSIXct(c("2015-01-01","2015-01-02")))

> df
  id        dte
1  1 2015-01-01
2  2 2015-01-02

## insert into database
mong <- mongo(collection = "test", db = "test", url = "mongodb://localhost")
mong$insert(df)

Mongo查询

若要在给定日期后查找条目,我将使用

代码语言:javascript
复制
db.test.find({"dte" : {"$gt" : new ISODate("2015-01-01")}})

如何在R中使用mongolite再现此查询?

R尝试

到目前为止我已经试过了

代码语言:javascript
复制
qry <- paste0('{"dte" : {"$gt" : new ISODate("2015-01-01")}}')
mong$find(qry)
Error: Invalid JSON object: {"dte" : {"$gt" : new ISODate("2015-01-01")}}

qry <- paste0('{"dte" : {"$gt" : "2015-01-01"}}')
mong$find(qry)
 Imported 0 records. Simplifying into dataframe...
    data frame with 0 columns and 0 rows

qry <- paste0('{"dte" : {"gt" : ', as.POSIXct("2015-01-01"), '}}')
mong$find(qry)
Error: Invalid JSON object: {"dte" : {"gt" : 2015-01-01}}

qry <- paste0('{"dte" : {"gt" : new ISODate("', as.POSIXct("2015-01-01"), '")}}')
mong$find(qry)
Error: Invalid JSON object: {"dte" : {"gt" : new ISODate("2015-01-01")}}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-26 12:40:12

@ that 2754799有正确的方法,但我做了一些小改动,使它回答了我的问题。如果他们想用这个解决方案编辑他们的答案,我会接受的。

代码语言:javascript
复制
d <- as.integer(as.POSIXct(strptime("2015-01-01","%Y-%m-%d"))) * 1000
## or more concisely
## d <- as.integer(as.POSIXct("2015-01-01")) * 1000
data <- mong$find(paste0('{"dte":{"$gt": { "$date" : { "$numberLong" : "', d, '" } } } }'))
票数 9
EN

Stack Overflow用户

发布于 2020-07-07 13:24:18

当我再次忘记如何在mongolite中查询日期时,这个问题一直出现在我的google结果的顶部,而且我懒得去查找文档:

上述Mongodb shell查询,

db.test.find({"dte" : {"$gt" : new ISODate("2015-01-01")}})

现在翻译成

mong$find('{"dte":{"$gt":{"$date":"2015-01-01T00:00:00Z"}}}')

或者,您可以添加millis:

mong$find('{"dte":{"$gt":{"$date":"2015-01-01T00:00:00.000Z"}}}')

如果使用错误的日期时间格式,则会收到一条有用的错误消息,指出正确的格式:use ISO8601 format yyyy-mm-ddThh:mm plus timezone, either "Z" or like "+0500"

当然,这在蒙古国手册中也有记录。

票数 7
EN

Stack Overflow用户

发布于 2015-12-25 04:57:31

试试mattjmorris从github得到的答案

代码语言:javascript
复制
library(GetoptLong)
datemillis <- as.integer(as.POSIXct("2015-01-01")) * 1000
data <- data_collection$find(qq('{"createdAt":{"$gt": { "$date" : { "$numberLong" : "@{datemillis}" } } } }'))

参考资料:https://github.com/jeroenooms/mongolite/issues/5#issuecomment-160996514

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34454034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档