You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:15:04