我试图根据时间戳查询mongodb,但我似乎总是得到一个空列表。我必须格式化错误。对于下面的mongo文档:
{
"_id" : ObjectId("21def16043fe370208f857c2"),
"username" : "user",
"domain" : "domain.com",
"hash" : "65fdacac5ff9e",
"created" : ISODate("2012-11-20T16:08:28Z"),
"ip" : "160.85.11.222",
"actions" :
...
}
我想按创建的字段过滤文档。但是,当我尝试使用时:
mongo <- mongo.create()
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "created")
mongo.bson.buffer.append(buf, "$gt", "2013-01-01")
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.append(buf, "$lt", "2013-08-01")
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
cursor <- mongo.find(mongo, "domain.actions", query)
我得到一个空列表。当我只使用$ gt或$ lt时它也不起作用。日期格式错误了吗?或者查询错了?
答案 0 :(得分:2)
您可以使用 mongo.bson.buffer.append.time
与 strptime("2013-01-01","%Y-%m-%d")
代替“mongo.bson.buffer.append(buf,”$ gt“,startDate )“或”mongo.bson.buffer.append(buf,“$ gt”,as.Date(“2013-01-01”))“
mongo <- mongo.create()
buf <- mongo.bson.buffer.create()
mongo.bson.buffer.start.object(buf, "created")
mongo.bson.buffer.append.time(buf, "$gt", strptime("2013-01-01","%Y-%m-%d"))
mongo.bson.buffer.finish.object(buf)
mongo.bson.buffer.append.time(buf, "$lt", strptime("2013-08-01","%Y-%m-%d"))
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
cursor <- mongo.find(mongo, "domain.actions", query)
答案 1 :(得分:1)
看起来rmongodb已经对此问题进行了更新。来自rmongodb website:
To build bson with ISODate data you should pass it as POSIXct object:
date_string <- "2014-10-11 12:01:06"
# Pay attention to timezone argument
query <- mongo.bson.from.list(list(date = as.POSIXct(date_string, tz='GMT')))
# Note, that internally MongoDB strores dates in unixtime format:
query
我将原先引用的MSK
时区更改为GMT
,以使其适用于我的数据。
答案 2 :(得分:0)
您需要将日期字符串转换为正确的日期,以便MongoDB可以进行比较。
尝试
mongo <- mongo.create()
buf <- mongo.bson.buffer.create()
startDate <- as.Date("2013-01-01")
endDate <- as.Date("2013-08-01")
mongo.bson.buffer.start.object(buf, "created")
mongo.bson.buffer.append(buf, "$gt", startDate)
mongo.bson.buffer.append(buf, "$lt", endDate)
mongo.bson.buffer.finish.object(buf)
query <- mongo.bson.from.buffer(buf)
cursor <- mongo.find(mongo, "domain.actions", query)
请注意,日期字符串采用R的默认格式。如果您更改它们,则必须向as.Date
提供格式字符串。
我不太熟悉R MongoDB驱动程序,但您可能还需要删除第一个finish.object。既然你想要gt&amp;这两个都适用于“创建”然后我想你想要它如上所述。