2014-11-14 4 views
7

Ich möchte die folgende Abfrage in Golang mit Mgo in einer Pipeline ausführen.MongoDB in Go (Golang) mit Mgo: wie logischer Operatoren zu Abfrage verwenden?

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

Ich habe überall gesucht, aber ich kann kein Beispiel so finden. Ich habe viele verschiedene Kombinationen ausprobiert, zum Beispiel:

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

die kompiliert korrekt, findet nichts. Irgendwelche Ideen?

Vielen Dank im Voraus

Antwort

17

können Ihre Mongo Anfrage an die folgende übersetzt werden:

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

If:

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

Die Abfrage sollte in der Mongo-Konsole mit dem folgenden äquivalent Sie möchten lieber ungeordnete Karten verwenden, bson.M, wäre es so:

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

Vielen Dank! Es funktioniert perfekt. –

+0

Willkommen! Sie haben das Array/Slice verpasst, also war der Schlüssel [] Schnittstelle {} – ANisus

+0

Ich kopiere eingefügt Ihr Bson.D Beispiel und ich bekomme "Ausnahme: Ein Pipeline-Stufe-Spezifikation-Objekt muss genau ein Feld enthalten." – FuriousGeorge

Verwandte Themen