我正在尝试在两个日期/时间之间使用rmongodb
.
我的文档结构如下:
{
"_id" : ObjectId("5304f93a0d5c9bf99c4e5a57"),
"field1" : 34
"field2" : 45
"field3" : 55
"time" : ISODate("2015-07-13T22:00:00.000Z")
}
.
.
.
{
"_id" : ObjectId("5304f93a0d5c9bf99c4e5a57"),
"field1" : 43
"field2" : 54
"field3" : 65
"time" : ISODate("2015-07-14T22:00:00.000Z")
}
现在我想获取两个日期之间的所有文件(原始集合有去年的文件)。由于我想在两天之间汇总文档的结果,因此我将此查询与其他查询一起通过管道传输以mongo.aggregation()
在rmongodb
.
library(rmongodb)
host <- "myHost"
db <- "myDB"
mongo <- mongo.create(host=host , db=db)
collection <- "myDB_coll"
namespace <- paste(db,collection,sep=".")
time1 <- as.numeric(as.POSIXct("2015-07-13 00:00:00", tz='GMT'))*86400000
time2 <- as.numeric(as.POSIXct("2015-07-14 00:00:00", tz='GMT'))*86400000
pipe_1 <- mongo.bson.from.JSON('{"$match":{"time":{"$gte":{"$date":"time1"},"$lt":{"$date":"time2"}}}}')
pipe_2 <- mongo.bson.from.JSON('{"$group":{"_id":"$myVariable","sum_field1":{"$sum":"$field1"},"sum_field2":{"$sum":"$field2"},"sum_field3":{"$sum":"$field3"}}}')
pipe_3 <- mongo.bson.from.JSON('{"$sort":{"sum_field1":-1}}')
cmd_list <- list(pipe_1,pipe_2,pipe_3)
res <- mongo.aggregation(mongo,namespace,cmd_list)
j <- mongo.bson.value(res,"result")
但是,最终的结果j
始终是integer(0)
。没有错误被抛出。我怀疑我的pipe_1
查询没有返回任何内容,因此没有可mongo.aggregation()
处理的文档。我使用的日期/时间格式正在产生问题 AFAIK。任何帮助,将不胜感激。
编辑:
以下代码运行良好,并为我提供了所需日期之间的所有文件。但它不是聚合。只需一个查询。AFAIK,我不能在rmongodb
. q
我尝试以 JSON 格式编写下面的等价物。它也不起作用,因为我们需要match
命令才能使聚合起作用。
time1 <- as.POSIXct("2015-07-13 00:00:00",tz='GMT')
time2 <- as.POSIXct("2015-07-14 00:00:00",tz='GMT')
q <- mongo.bson.from.list(list("time" = list("$gte" = time1,"$lt" = time2)))
mongo.find.all(mongo,namespace,q)