【问题标题】:MongoDB rename collection fails with "exceeds maximum length of 32, allowing for index names"MongoDB 重命名集合失败,“超过最大长度 32,允许索引名称”
【发布时间】:2013-08-11 08:39:14
【问题描述】:

我们在 MongoDB 中重命名集合时遇到问题。

集合有一些相当长的索引名称,但这在集合的一般使用中不是问题。我们可以写入并查询它,索引是有效的(如果索引不存在,我们可以通过查询性能的下降来判断)。

但是,当我们重命名集合时,它会失败并显示以下消息:

MongoDB.Driver.MongoCommandException:命令“renameCollection” 失败:异常:集合名称长度 43 超出最大长度 32,允许索引名称(响应:{“errmsg”:“异常: 集合名称长度 43 超过最大长度 32,允许 对于索引名称”,“代码”:16451,“确定”:0.0 })

由于各种原因,我不会在这里详细介绍,重命名集合是我们工作流程的重要组成部分。

如果有人知道此问题的任何解决方法,将不胜感激。

谢谢。

更新:

这是数据库/集合/索引名称:

【问题讨论】:

  • 您能提供您的收藏和索引名称的列表吗?看起来此代码将最大集合命名空间大小计算为(120 - 最长索引长度 - 1),如果超过则失败。如果这与用于初始创建的大小规则不一致,听起来像是一个错误,可能是 jira.mongodb.org/browse/SERVER-7282 。此检查的代码在这里:github.com/mongodb/mongo/blob/v2.4/src/mongo/db/cloner.cpp#L864
  • +1 作为错误参考。顺便说一句,重命名不适用于分片集合。
  • 您从哪个 GUI 工具获取屏幕截图?看起来不错:)
  • 您是要重命名集合以使其具有更长的名称,还是新名称的长度与旧名称相同或更短?如果它的长度相同或更短,则可能是一个错误,但如果更长,那么如果旧的长度已经接近允许的长度边界,则不允许它是有意义的。

标签: mongodb mongodb-.net-driver


【解决方案1】:

我不知道是否可以使用可读性较低的索引名称,但您可以自己指定名称,这样它们就不会太长(为您的集合名称留出更多空间)。

db.someReallyLongCollectionName.ensureIndex({
    IncludeInLocationBasedSearch: 1,
    TotalBranches: 1,
    Categories: 1
}, { name: 'short1'});

您甚至可以用单个字符来命名索引,并在其他地方对它们的含义有一些参考。

ensureIndex 的第二个参数用于选项,完整文档在这里:http://docs.mongodb.org/manual/reference/method/db.collection.ensureIndex/

【讨论】:

    猜你喜欢
    • 2019-09-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多