{ "orderInfoList.$_1":{ "v":2, "key":[ [ "orderInfoList.$", 1.0 ] ] } } 这个mongo创建索引是什么意思?
这个 MongoDB 索引定义表示创建一个通配符索引。让我详细解释一下:
索引结构解析
JSON
{
"orderInfoList.$**_1": {
"v": 2,
"key": [
["orderInfoList.$**", 1.0]
]
}
}
各部分含义:
orderInfoList.$**_1- 索引名称- 自动生成的索引名
$**表示通配符索引_1表示升序排序
"v": 2- 索引版本- 版本2,MongoDB 3.4+ 的索引格式
索引键定义:
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.productNameorderInfoList.priceorderInfoList.items.quantityorderInfoList.xxx(任何子字段)
使用场景
这种索引适合:
- 动态模式:当
orderInfoList的子字段结构不固定时 - 查询灵活性:需要查询各种不同的子字段
- 开发阶段:不确定具体会查询哪些字段时
注意事项
- 存储成本:通配符索引会占用更多磁盘空间
- 性能:不如针对特定字段的专用索引高效
- 维护:文档结构变化时会自动调整索引
这个索引提供了很好的查询灵活性,但需要权衡存储和性能成本。