and or判断数组为空
rd:=bson.M{"num":"1","$or":[]bson.M{{"$where":"this.logo.length>0"},{"$where":"this.ziliao.length>0"}}}
mongo-go-driver: nested OR/AND query filterI try to create a MongoDB query filter with the nested operators (OR/AND/...). But lib requires to create abson.D
and passbson.E
elements into it. If I need to haveOR/AND
insideAND/OR
- I need to putbson.M + bson.D
insidebson.D
like this:
filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
.. and of course it doesn't work:cannot use primitive.M literal (type primitive.M) as type primitive.E in slice literal
. Probably the same problem will happen if later I try to use a... in []
logics inside abson.D
How do I create such nested queries in Go and official MongoDB driver?
What matters is that$or
requires an array, which isbson.A ,
Also$and
is the default, you don't have to indicate that.
Your filter can be defined like this:
filter := bson.D{
{"p", 10},
{"$or", bson.A{
bson.D{{"s", 30}},
bson.D{{"a", 10}},
}},
}
You may also use this:
filter = bson.D{
{"p", 10},
{"$or", bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
}},
}
Or this:
filter := bson.M{
"p": 10,
"$or": bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
},
}