2014-11-14 20 views
7

Vorrei eseguire la query seguente in golang utilizzando mgo in una pipeline.MongoDB in Go (golang) con mgo: come utilizzare gli operatori logici per interrogare?

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

Ho cercato ovunque, ma non riesco a trovare un esempio come questo. Ho provato molte combinazioni diverse, ad esempio:

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

che compila correttamente, non trova nulla. Qualche idea?

Grazie in anticipo

risposta

17

Vostri criteri di mongo può essere tradotto al seguente:

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

La query dovrebbe essere equivalente al seguente nella console mongo:

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

Se preferiresti usare le mappe non ordinate, bson.M, sarebbe come questo:

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

Grazie mille! Funziona perfettamente. –

+0

Benvenuto! Hai perso l'array/slice, quindi la chiave era [] interface {} – ANisus

+0

Ho copiato il tuo esempio di bson.D e ottengo "eccezione: un oggetto di specifica dello stage della pipeline deve contenere esattamente un campo". – FuriousGeorge