2014-11-14 19 views
7

Chciałbym uruchomić następujące zapytanie w golang za pomocą mgo w potoku.MongoDB in Go (golang) z mgo: jak używać operatorów logicznych do zapytania?

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

Szukałem wszędzie, ale nie mogę znaleźć takiego przykładu. Próbowałem wielu różnych kombinacji, na przykład:

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

który kompiluje się poprawnie, niczego nie znajduje. Jakieś pomysły?

góry dziękuję

Odpowiedz

17

Zapytanie Mongo można przełożyć na następujące kwestie:

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

Kwerenda powinna być równoważna następującej w konsoli Mongo:

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

Jeśli wolisz używać nieuporządkowanych map, bson.M, to byłoby tak:

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

Dziękuję bardzo! Działa idealnie. –

+0

Witamy! Tęskniłeś za tablicą/plasterkiem, więc kluczem było [] interface {} – ANisus

+0

Kopiuję wklejony twój bson.D przykład i otrzymuję "wyjątek: Obiekt specyfikacji etapu rurociągu musi zawierać dokładnie jedno pole." – FuriousGeorge