0

を使用して、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 つだけです。私の知る限り、 の集計パイピングに関連してリストを使用することはできませんrmongodbq以下に相当するものを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