2014-01-27 5 views
1

rmongodb를 사용하여 R에서 mongodb 쿼리를 실행 중입니다. 문서에 특정 필드가 존재하는지 여부를 알아야합니다. 그러나 $ exists는 결과를 산출하지 못합니다. 다음은 쿼리에 사용되는 샘플 코드입니다.

library(rmongodb) 
> mongo <- mongo.create(host="localhost") 
> dbns <- mongo.get.database.collections(mongo, db="namedisambiguation") 
> buf <- mongo.bson.buffer.create() 
> mongo.bson.buffer.start.object(buf, "name") 
[1] TRUE 
> mongo.bson.buffer.append(buf, "$exists", 1L) 
[1] TRUE 
> qrbson <- mongo.bson.from.buffer(buf) 
> cur <- mongo.find(mongo, ns=dbns, query=qrbson) 
> qrbson 
    name : 3  
     $exists : 16  1 

> mongo.cursor.next(cur) 
[1] FALSE 

나는 TRUE, "참" "true"로 대신 1L의 1,하지만이 모두 같은 결과를 사용하여이 쿼리를 시도했습니다. 내가 mongo 콘솔 에서이 쿼리를 확인하고 결과가 필요에 따라입니다. 그러나 R에서, 그것은 비어있는 것을 생산합니다. 나는 어딘가에서 잘못 했는가?

+1

월요일 아침 유머 : 더 이상 '$ 존재'가 없음을 아는 것이 좋습니다. 마침내 양성 평등! :-) –

답변

0

문제점을 재현 할 수 있으며 버그 일 것입니다.

그러나 당신이 할 수있는 것은 여기에이 라인을 따라 뭔가입니다 - 코드는 내 데이터베이스를 테스트 : 한 문서에서 두 개의 필드가 존재하는지 여부를 확인해야하는 경우

ns <- "test.things" 
qs1 <- '{ "label": { "$exists": true } }' # field exists 
qs2 <- '{ "none": { "$exists": true } }' # field does not exist 

mongo.count(mongo, ns, qs1) 
[1] 9 

mongo.count(mongo, ns, qs2) 
[1] 0 

, 당신의 JSON는 다음과 같이한다 : 그것은 즉, JSON 표기법을 사용하다에 원래의 접근 방식에서 조금 다르다하더라도

qs3 <- '{ "name": { "$exists": true }, "schoolname": { "$exists": true } }' 

이 당신이 원하는 결과를 얻을 수 있습니다. mongo.find()

인수 에 대한 rmongodb 문서 ...

쿼리 ...에서

또는, 쿼리는에 를 변환됩니다 유효한 JSON 문자열을 할 수있다 mongo.bson.from.JSON()의 mongo.bson 객체.

+0

답변을 주셔서 감사합니다, 그것은 하나의 쿼리와 정확히 내 질문에 필요한 일했습니다. 그러나 실제 문제는 "{and : {{name : {$ exists : 1}}, {schoolname : {$ exists : 1}}}}와 같은 qs1 및 qs2에"그리고 "있었습니다. 난 그냥 당신과 같은 일을 시도했지만 여전히 작동하지 않으며 결과로 -1을 생성 –

+0

편집 된 답변보기 – vaettchen

+0

감사합니다 !! which worked worked –