MongoDB docs状态表明多键索引不能覆盖对数组字段的查询。
然后继续显示执行此操作的多键索引的example。
那怎么了? 多键索引的含义是什么,不能覆盖对数组字段的查询。也许我对 cover 的定义是错误的,但是我已经阅读了文档并了解了它们如何定义 cover 。
考虑以下形式的文件的库存收集:
{
_id: 1,
item: "abc",
stock: [
{ size: "S", color: "red", quantity: 25 },
{ size: "S", color: "blue", quantity: 10 },
{ size: "M", color: "blue", quantity: 50 }
]
}
{
_id: 2,
item: "def",
stock: [
{ size: "S", color: "blue", quantity: 20 },
{ size: "M", color: "blue", quantity: 5 },
{ size: "M", color: "black", quantity: 10 },
{ size: "L", color: "red", quantity: 2 }
]
}
{
_id: 3,
item: "ijk",
stock: [
{ size: "M", color: "blue", quantity: 15 },
{ size: "L", color: "blue", quantity: 100 },
{ size: "L", color: "red", quantity: 25 }
]
}
以下操作在stock.size
和stock.quantity
字段上创建多键索引:
db.inventory.createIndex( { "stock.size": 1, "stock.quantity": 1 } )
复合多键索引可以支持包含既包含索引字段又包含仅包含索引前缀“ stock.size”的谓词的查询,如以下示例所示:
db.inventory.find( { "stock.size": "M" } )
db.inventory.find( { "stock.size": "S", "stock.quantity": { $gt: 20 } } )
答案 0 :(得分:0)
假设您拥有属性“ stock”,它是对象数组,并且您在整个属性上创建了多键索引: .createIndex({“ stock”: 1})
案例1。索引{“ stock”:1}-如果您要搜索整体< / strong>对象
.find({“股票”:{“大小”:“ x”,“颜色”:“ y”,数量:1}})
情况2。索引{“ stock”:1}-如果仅搜索对象的一个属性,则无法使用
.find({“ stock.size”:“ x”})
BTW:如果在保存数组的属性上创建索引,则mongo会自动在该属性上创建多键索引。因此,“ stock”索引和“ stock.color”索引都是多键索引。这为在不同情况下使用相同的单词提供了一些混乱的空间。这就是为什么你感到困惑。