MongoDB in Go (golang) with mgo: how to use logical operators to query?
17,546
Solution 1
Your mongo query can be translated to the following:
pipeline := bson.D{
{"key1", 1},
{"$or", []interface{}{
bson.D{{"key2", 2}},
bson.D{{"key3", 2}},
}},
}
The query should be equivalent to the following in the mongo console:
db.mycollection.find({"key1" : 1, "$or" : [{"key2" : 2}, {"key3" : 2}]})
If you'd rather wish to use unordered maps, bson.M
, it would be like this:
pipeline := bson.M{
"key1": 1,
"$or": []interface{}{
bson.M{"key2": 2},
bson.M{"key3": 2},
},
}
Solution 2
go lang Mongo db Or query
findQuery := bson.M{"key1" : 1}
orQuery := []bson.M{}
orQuery := append(orQuery, bson.M{"key2" : 2}, bson.M{"key3" : 2})
findquery["$or"] = orQuery
result := []interface{}
err := mongo.DB.C("collectionName").find(findQuery).All(&result)
Comments
-
p.paolo321 almost 2 years
I would like to run the following query in golang using mgo in a pipeline.
{"key1" : 1, "$or" : [{"key2" : 2}, {"key3" : 2}]}
I have looked everywhere, but I cannot find an example like this. I have tried many different combinations, for example:
... pipeline := []bson.M{ bson.M{ "$match" : bson.M{ "key1" : 1, "$or" : bson.M{ "key2" : 2, "key3" : 2}, } ... }
which compiles correctly, does not find anything. Any ideas?
Thank you in advance
-
ANisus over 9 yearsWelcome! You missed the array/slice, so the key was []interface{}
-
FuriousGeorge over 9 yearsI copy pasted your bson.D example and I get "exception: A pipeline stage specification object must contain exactly one field."
-
ANisus over 9 years@FuriousGeorge Are you using the query in a
Find
orPipe
? The error is a mongodb one, but I haven't played so much with building aggregation pipelines, so I can't tell you right away how to fix it. Sorry. -
FuriousGeorge over 9 yearspipe := collection.Pipe(pipeline) if error := pipe.All(&res); error != nil { t.Fatal(error) }