MongoDB Map Reduce:自动创建的索引名称太长,可以自定义吗?

Posted

技术标签:

【中文标题】MongoDB Map Reduce:自动创建的索引名称太长,可以自定义吗?【英文标题】:MongoDB Map Reduce: Auto-created index name too long, possible to customize? 【发布时间】:2020-03-27 07:05:44 【问题描述】:

调试 MongoDB mapreduce 很痛苦,所以我不能 100% 确定我理解这里发生了什么,但我想我明白了……

我收到的错误消息是:mr failed, removing collectionCannotCreateIndex: namespace name generated from index name "my_dbname.tmp.mr.collectionname_69.$_id.aggregation_method_1__id.date_key.start_1__id.date_key.timeres_1__id.region.center_2dsphere" is too long (127 byte max)

我用于 mapreduce 的键是一个具有四个或五个属性的复杂对象,所以我猜测发生的情况是,当 Mongo 尝试使用我指定的键创建其临时输出集合时,它会尝试自动创建该复杂键的索引;但是由于密钥本身有几个属性,因此密钥的默认名称太长。当我在“正常”情况下索引这样的复杂对象时,我只是给索引一个自定义名称。但我没有看到一种方法可以为 mapreduce 自动生成的集合做到这一点。

有没有一种简单的方法可以在不改变我的密钥结构的情况下解决这个问题?

【问题讨论】:

【参考方案1】:

好吧,原来我被错误信息欺骗了!上面引用的错误消息中的<collectionname> 是我正在使用mapreduce 处理其记录的INPUT 集合的名称......但它所指的索引是OUTPUT 集合的一部分!所以我只需要给输出集合中的索引一个名字,瞧,问题就解决了。多么奇怪的行为。

【讨论】:

以上是关于MongoDB Map Reduce:自动创建的索引名称太长,可以自定义吗?的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB Map Reduce

MongoDB Map Reduce

Mongodb聚合框架比map/reduce更快吗?

mongodb中的联合查询不使用map/reduce

mgo 和 mongodb 的 i/o 超时

mongodb使用map reduce从其他集合中插入嵌入文档海量集合