2014-11-14 3 views
7

파이프 라인에서 mgo를 사용하여 golang에서 다음 쿼리를 실행하고 싶습니다.MongoDB in mgoo (golang) : mong : 쿼리에 논리 연산자를 사용하는 방법은 무엇입니까?

{"key1" : 1, 
"$or" : [{"key2" : 2}, {"key3" : 2}]} 

나는 어디 론가 보았지만 이와 같은 예는 찾을 수 없습니다. 나는 많은 다른 조합을 시도했다 : 예를 들면 :

... 
pipeline := []bson.M{ 
        bson.M{ "$match" : bson.M{ "key1" : 1, 
                "$or" : bson.M{ "key2" : 2, "key3" : 2}, 
        } 
        ... 
      } 

정확하게 컴파일되고 아무 것도 찾지 못한다. 어떤 아이디어?

은 사전에 감사

귀하의 몽고 쿼리는 다음에 번역 될 수

답변

17

:

db.mycollection.find({"key1" : 1, "$or" : [{"key2" : 2}, {"key3" : 2}]}) 

경우 :

pipeline := bson.D{ 
    {"key1", 1}, 
    {"$or", []interface{}{ 
     bson.D{{"key2", 2}}, 
     bson.D{{"key3", 2}}, 
    }}, 
} 

쿼리이 (가) 몽고 콘솔에 다음과 동일해야 오히려 정렬되지 않은지도 인 bson.M을 사용하고 싶다면 다음과 같이됩니다 :

pipeline := bson.M{ 
    "key1": 1, 
    "$or": []interface{}{ 
     bson.M{"key2": 2}, 
     bson.M{"key3": 2}, 
    }, 
} 
+0

대단히 감사합니다. 그것은 완벽하게 작동합니다. –

+0

환영합니다! 당신은 배열/슬라이스를 놓쳤으므로 열쇠는 [] interface {} – ANisus

+0

입니다. bson.D 예제를 붙여 넣기 복사하고 "예외 : 파이프 라인 스테이지 지정 객체가 정확히 하나의 필드를 포함해야합니다." – FuriousGeorge