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

使用Djongo引擎通过SSH隧道连接DocumentDB时遇索引命名空间过长错误

解决DocumentDB(Djongo)索引命名空间过长错误(错误码67)

这个错误是因为DocumentDB(兼容MongoDB)限制命名空间(格式:数据库名.集合名.$索引名)的总长度不能超过128字节,Djongo默认根据字段名自动生成的索引名(尤其是复合索引)很容易触发这个限制。以下是具体解决方法:

1. 手动指定短索引名

在Django模型的Meta类中定义索引时,显式设置短索引名,替代Djongo自动生成的长名称。

示例:

from djongo import models

class UserProfile(models.Model):
    user_full_name = models.CharField(max_length=255)
    user_email_address = models.CharField(max_length=255)
    
    class Meta:
        # 手动指定短索引名,避免自动生成的长名称
        indexes = [
            models.Index(
                fields=['user_full_name', 'user_email_address'],
                name='user_name_email_idx'  # 短且有意义的索引名
            )
        ]

计算命名空间长度时,要包含数据库名、集合名、$符号和索引名的总字节数,尽量控制在128以内。

2. 缩短集合名或数据库名

如果索引名已最短但仍超标,检查数据库名或集合名是否过长:

  • 手动指定集合名:在模型Meta类中用db_table设置短名称
  • 数据库名尽量简化,避免过长的业务前缀

示例:

class UserProfile(models.Model):
    # 字段定义...
    
    class Meta:
        db_table = 'user_prof'  # 缩短集合名
        indexes = [
            models.Index(fields=['user_full_name'], name='user_name_idx')
        ]

3. 删除已存在的过长索引

如果是已创建的索引导致报错,先连接DocumentDB删除该索引:

用Pymongo操作

from pymongo import MongoClient

# 假设已通过SSH隧道建立连接(本地端口27017)
client = MongoClient('localhost', 27017)
db = client['your_database_name']
coll = db['your_collection_name']

# 列出所有索引,查看名称和对应的命名空间长度
for idx in coll.list_indexes():
    namespace = f"{db.name}.{coll.name}.$.{idx['name']}"
    print(f"索引名: {idx['name']}, 命名空间长度: {len(namespace)}")

# 删除过长的索引
coll.drop_index('auto_generated_long_index_name')

用Mongo Shell操作

use your_database_name
db.your_collection_name.dropIndex("auto_generated_long_index_name")

4. 覆盖自动生成的约束索引

Djongo会为unique、foreign_key等约束自动生成索引,这些索引名往往很长。手动定义索引替代自动生成的版本:

示例(处理unique约束):

class UserProfile(models.Model):
    user_email = models.CharField(max_length=255)
    
    class Meta:
        indexes = [
            models.Index(fields=['user_email'], name='user_email_unique', unique=True)
        ]

注意:不要同时在字段上设置unique=True,避免重复生成索引。


内容的提问来源于stack exchange,提问作者user21312575

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:10:06