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

在Liquibase changelog.json中创建MongoDB多键索引失败求正确格式

解决Liquibase中MongoDB多键索引创建的InvalidIndexSpecificationOption错误

错误原因

你的配置抛出错误的核心问题有两个:

  1. options字段包含无效配置:你在options里写了"stock.size": "stock_size",这不是MongoDB索引的合法选项——索引名称需要通过name字段指定,而非把字段名作为键。
  2. $rawJson的错误使用:keys和options中的$rawJson用法不符合Liquibase MongoDB扩展的要求,且对于嵌套字段索引,其实无需额外嵌套$rawJson。

另外需要明确:MongoDB会自动创建多键索引,只要你索引的字段是数组类型(比如示例中的stock是数组,stock.size是数组内的嵌套字段),不需要额外配置多键相关参数。

正确配置格式

以下是两种可行的正确配置:

方式1:直接指定索引键(推荐)

这种写法简洁明了,Liquibase能正确解析嵌套字段:

{
  "createIndex": {
    "collectionName": "inventory",
    "keys": {
      "stock.size": 1
    },
    "options": {
      "name": "stock_size",
      "unique": false
    }
  }
}

方式2:使用$rawJson传递原始JSON(特殊场景用)

如果需要传递更复杂的索引规则,可以用$rawJson,但注意值必须是字符串形式的JSON:

{
  "createIndex": {
    "collectionName": "inventory",
    "keys": {
      "$rawJson": "{ \"stock.size\": 1 }"
    },
    "options": {
      "$rawJson": "{ \"name\": \"stock_size\", \"unique\": false }"
    }
  }
}

注意事项

  • 如果设置unique: true,需要确保集合中没有重复的stock.size值(比如你的示例文档里有两个size: "L"的条目,直接创建唯一索引会失败)。
  • 多键索引由MongoDB自动识别数组字段创建,无需额外声明multikey参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 06:52:41