如何在Golang Mongo API对接Cosmos DB时禁用跨分区查询
实现方案
Cosmos DB for MongoDB 通过专属查询参数disableCrossPartitionQuery控制跨分区查询能力,官方Mongo Go SDK支持通过自定义选项传入该参数,具体操作如下:
1. 单次查询配置
普通查询(Find)
在构造查询选项时通过SetCustom方法传入参数:
import ( "context" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func querySinglePartition(collection *mongo.Collection, filter bson.M) ([]bson.M, error) { // 注入禁用跨分区查询参数 findOptions := options.Find().SetCustom(bson.M{ "disableCrossPartitionQuery": true, }) cursor, err := collection.Find(context.TODO(), filter, findOptions) if err != nil { return nil, err } defer cursor.Close(context.TODO()) var res []bson.M if err = cursor.All(context.TODO(), &res); err != nil { return nil, err } return res, nil }
聚合查询(Aggregate)
聚合操作同理,在聚合选项中添加自定义参数:
aggOptions := options.Aggregate().SetCustom(bson.M{ "disableCrossPartitionQuery": true, }) cursor, err := collection.Aggregate(context.TODO(), pipeline, aggOptions)
2. 全局统一配置
如果需要所有查询默认禁用跨分区,可在封装的公共数据库操作方法中统一注入上述参数,无需逐个请求设置。
3. 异常处理规则
- 配置生效后,若请求未携带分区键、需要跨分区执行,Cosmos DB会直接返回错误,错误信息包含
Cross partition query is disabled标识,可捕获该错误做业务兜底。 - 该参数仅作用于当前请求,不会影响其他写入、更新类操作。
内容的提问来源于stack exchange,提问作者Guru
相关产品推荐
相关产品推荐

