を使用して、2 つの日付/時刻の間で MongoDB にクエリを実行しようとしています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")
}
ここで、2 つの日付の間のすべてのドキュメントを取得したいと考えています (元のコレクションには昨年のドキュメントがあります)。そして、2 日間のドキュメントの結果を集計したいので、このクエリを他のクエリと一緒にパイプ処理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 で問題を引き起こしています。どんな助けでも大歓迎です。
編集:
次のコードは完全に機能し、必要な日付の間のすべてのドキュメントを提供します。しかし、それは集約ではありません。クエリは 1 つだけです。私の知る限り、 の集計パイピングに関連してリストを使用することはできません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)