mongo-go-driver: 嵌套 OR/AND 查询过滤器
mongo-go-driver: nested OR/AND query filter
我尝试使用嵌套运算符 (OR/AND/...) 创建一个 MongoDB 查询过滤器。但是 lib 需要创建一个 bson.D
并将 bson.E
元素传递给它。如果我需要在 AND/OR
中包含 OR/AND
- 我需要像这样将 bson.M + bson.D
放在 bson.D
中:
filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
..当然它不起作用:cannot use primitive.M literal (type primitive.M) as type primitive.E in slice literal
。如果稍后我尝试在 bson.D
中使用 ... in []
逻辑,可能会发生同样的问题
如何在 Go 和官方 MongoDB 驱动程序中创建此类嵌套查询?
重要的是 $or
需要一个数组,即 bson.A
。另外 $and
是默认值,您不必指定。
您的过滤器可以这样定义:
filter := bson.D{
{"p", 10},
{"$or", bson.A{
bson.D{{"s", 30}},
bson.D{{"a", 10}},
}},
}
你也可以使用这个:
filter = bson.D{
{"p", 10},
{"$or", bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
}},
}
或者这个:
filter := bson.M{
"p": 10,
"$or": bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
},
}
我尝试使用嵌套运算符 (OR/AND/...) 创建一个 MongoDB 查询过滤器。但是 lib 需要创建一个 bson.D
并将 bson.E
元素传递给它。如果我需要在 AND/OR
中包含 OR/AND
- 我需要像这样将 bson.M + bson.D
放在 bson.D
中:
filter := bson.M{"$and": bson.D{{"p", 10}, bson.M{"$or": bson.D{{"s", 30}, {"a", 1}}}}}
..当然它不起作用:cannot use primitive.M literal (type primitive.M) as type primitive.E in slice literal
。如果稍后我尝试在 bson.D
... in []
逻辑,可能会发生同样的问题
如何在 Go 和官方 MongoDB 驱动程序中创建此类嵌套查询?
重要的是 $or
需要一个数组,即 bson.A
。另外 $and
是默认值,您不必指定。
您的过滤器可以这样定义:
filter := bson.D{
{"p", 10},
{"$or", bson.A{
bson.D{{"s", 30}},
bson.D{{"a", 10}},
}},
}
你也可以使用这个:
filter = bson.D{
{"p", 10},
{"$or", bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
}},
}
或者这个:
filter := bson.M{
"p": 10,
"$or": bson.A{
bson.M{"s": 30},
bson.M{"a": 10},
},
}