2013-08-14 5 views
0

timestamp를 기반으로 mongodb를 쿼리하려고합니다.하지만 항상 빈 목록을 돌려받는 것처럼 보입니다. 나는 틀린 무엇인가를 형식화해야만한다. 아래의 몽고 문서의 경우 :timestamp에 의해 mongo에 rmongodb를 묻습니다.

{ 
"_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를 사용할 때도 작동하지 않습니다. 포맷 된 날짜가 잘못 되었습니까? 또는 쿼리가 잘못 되었습니까?

+1

날짜가 R로 표시되는 방법을 잘 모르겠지만 귀하의 문제는 귀하가 $ gt the STRING "2013-01-01"을 (를) 수행하고있는 것으로 의심됩니다. 2013-01-01 문자열을 날짜 유형으로 변환해야합니다. 긍정적이지는 않지만 테스트하지는 않았지만 유형 문제가 귀하의 문제를 일으키는 것으로 의심됩니다. – ACE

답변

0

MongoDB에서 비교할 수 있도록 날짜 문자열을 적절한 날짜로 변환해야합니다.

날짜 문자열 R의 기본 형식인지

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) 

참고하십시오. 변경 한 경우 형식 문자열을 as.Date으로 제공해야합니다.

R MongoDB 드라이버에 익숙하지 않지만 첫 번째 finish.object를 제거해야 할 수도 있습니다. gtlt를 모두 "생성"에 적용하려면 위와 같이 사용하고 싶다고 생각합니다.

2

대신 "mongo.bson.buffer.append (BUF,"$에있다 "startDate를)"또는 strptime("2013-01-01","%Y-%m-%d")mongo.bson.buffer.append.time "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) 
0

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 

나는 내 데이터에 작동하도록 GMT에 원래 인용 MSK 시간대를 변경했습니다.