MongoDB通配符索引详解与使用

小豆丁 5天前 ⋅ 18 阅读
聊天记录
头像

{ "orderInfoList.$_1":{ "v":2, "key":[ [ "orderInfoList.$", 1.0 ] ] } } 这个mongo创建索引是什么意思?

头像

这个 MongoDB 索引定义表示创建一个通配符索引。让我详细解释一下:

索引结构解析

JSON
{
  "orderInfoList.$**_1": {
    "v": 2,
    "key": [
      ["orderInfoList.$**", 1.0]
    ]
  }
}

各部分含义:

  1. orderInfoList.$**_1 - 索引名称

    • 自动生成的索引名
    • $** 表示通配符索引
    • _1 表示升序排序
  2. "v": 2 - 索引版本

    • 版本2,MongoDB 3.4+ 的索引格式
  3. 索引键定义

    JSON
    "key": [["orderInfoList.$**", 1.0]]
    
    • orderInfoList.$** - 通配符路径,匹配 orderInfoList 字段的所有子字段
    • 1.0 - 升序排序

这个索引的作用

支持的查询:

JAVASCRIPT
// 索引会支持对 orderInfoList 任何子字段的查询
db.collection.find({"orderInfoList.productName": "手机"})
db.collection.find({"orderInfoList.price": {$gt: 100}})
db.collection.find({"orderInfoList.items.0.quantity": 2})

相当于为以下字段都创建了索引:

  • orderInfoList.productName
  • orderInfoList.price
  • orderInfoList.items.quantity
  • orderInfoList.xxx (任何子字段)

使用场景

这种索引适合:

  • 动态模式:当 orderInfoList 的子字段结构不固定时
  • 查询灵活性:需要查询各种不同的子字段
  • 开发阶段:不确定具体会查询哪些字段时

注意事项

  • 存储成本:通配符索引会占用更多磁盘空间
  • 性能:不如针对特定字段的专用索引高效
  • 维护:文档结构变化时会自动调整索引

这个索引提供了很好的查询灵活性,但需要权衡存储和性能成本。

全部评论: 0

    我有话说: