MongoDB Map Reduce:自动创建的索引名称太长,可以自定义吗?
MongoDB Map Reduce: Auto-created index name too long, possible to customize?
调试 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 尝试使用我指定的键创建其临时输出集合时,它试图在那个复杂的键上自动创建一个索引;但由于密钥本身具有多个属性,因此密钥的默认名称太长。当我在 "normal" 情况下索引像这样的复杂对象时,我只是给索引一个自定义名称。但是对于 mapreduce 自动生成的集合,我看不到这样做的方法。
有没有一种简单的方法可以在不更改我的密钥结构的情况下解决这个问题?
嗯,原来我是被错误信息骗了!上面引用的错误消息中的 <collectionname>
是我正在使用 mapreduce 处理其记录的 INPUT 集合的名称...但它所指的索引是属于 OUTPUT 集合的索引!所以我只需要给输出集合中的索引一个名字,瞧,问题就解决了。好奇怪的行为。
调试 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 尝试使用我指定的键创建其临时输出集合时,它试图在那个复杂的键上自动创建一个索引;但由于密钥本身具有多个属性,因此密钥的默认名称太长。当我在 "normal" 情况下索引像这样的复杂对象时,我只是给索引一个自定义名称。但是对于 mapreduce 自动生成的集合,我看不到这样做的方法。
有没有一种简单的方法可以在不更改我的密钥结构的情况下解决这个问题?
嗯,原来我是被错误信息骗了!上面引用的错误消息中的 <collectionname>
是我正在使用 mapreduce 处理其记录的 INPUT 集合的名称...但它所指的索引是属于 OUTPUT 集合的索引!所以我只需要给输出集合中的索引一个名字,瞧,问题就解决了。好奇怪的行为。