MongoDB createIndexes()是否支持为每个索引指定独立配置选项?
MongoDB createIndexes() 多索引独立配置问题
问题
MongoDB的createIndexes()方法是否支持在脚本中为每个待创建的索引指定独立配置选项?编写如下代码尝试实现时运行失败,返回错误信息:
var indexes = [ { key: { "productId":1, "productName":1 }, partialFilterExpression: { "catalog": { $exists: true} }, name:"productId_productName_catalog_partial" }, { key: { "productId":1, "createdDate":1 }, sparse: true, name:"productId_createdDate_only" } ]; db.product.createIndexes(indexes);
错误信息:
{ "message" : "索引规格 { key: { key: { productId: 1, productName: 1 }, partialFilterExpression: { catalog: { $exists: true } }, name: 'productId_productName_catalog_partial' }, name: 'key_[object Object]_partialFilterExpression_[object Object]_name_productId_productName_catalog_partial' } 错误 :: 原因 :: 未知索引插件 'productId_productName_catalog_partial'", "ok" : 0, "code" : 67, "codeName" : "CannotCreateIndex" }
结论与解决方案
MongoDB的createIndexes()方法完全支持为每个待创建的索引指定独立配置选项,你的语法逻辑本身符合官方规范。
错误根源是MongoDB错误地将索引配置对象解析为key字段的值,常见触发原因及修复方式:
误调用单数方法:
确认代码中调用的是复数形式的createIndexes(),而非单数的createIndex()。createIndex()仅支持单个索引配置,传入数组会导致整个数组被当作key值解析,触发上述错误。语法隐性错误:
移除数组末尾的多余逗号(若存在),部分旧版JavaScript引擎会将其解析为额外的undefined元素,干扰索引配置解析。
修正后的代码(确保调用正确方法):
var indexes = [ { key: { "productId": 1, "productName": 1 }, partialFilterExpression: { "catalog": { $exists: true } }, name: "productId_productName_catalog_partial" }, { key: { "productId": 1, "createdDate": 1 }, sparse: true, name: "productId_createdDate_only" } ]; db.product.createIndexes(indexes);
额外说明
- 需使用MongoDB 3.0及以上版本,
createIndexes()从该版本开始支持数组形式的多索引配置。 partialFilterExpression与sparse不能在同一个索引中混用,但你的代码中是两个独立索引,此用法合法。
内容的提问来源于stack exchange,提问作者CSK 4ever
相关产品推荐
相关产品推荐

