0

我正在尝试在两个日期/时间之间使用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)
4

0 回答 0