以下不会产生“无法索引并行数组”错误:
db.test.ensureIndex({"values.x": 1, "values.y": 1})
db.test.insert({"values": [ {"x": 1, "y": 2}, {"x": 2, "y": 2} ]})
db.test.insert({"values": [ {"x": 2, "y": 1}, {"x": 1, "y": 1} ]})
db.test.insert({"values": [ {"x": 1, "y": 1}, {"x": 1, "y": 1} ]})
因此,在对象嵌套在一个数组字段中的多个对象属性上,似乎允许使用复合索引。
文档说“MongoDB 分别索引数组中的每个值”,因此对于上述场景,我希望为每个文档中的 values.x 和 values.y 的所有组合创建索引条目。
但是,以下对两个嵌套字段的查询表明仅使用复合索引中的第一个字段 - nscanned 为 2 表明 Mongo 必须检查第二个添加的文档以检查与 x = 匹配的数组元素上的 y = 2 2.
db.test.find({"values.x": 2, "values.y": 2}).explain()
{
"cursor" : "BtreeCursor values.x_1_values.y_1",
"isMultiKey" : true,
"n" : 1,
"nscannedObjects" : 2,
"nscanned" : 2,
"nscannedObjectsAllPlans" : 2,
"nscannedAllPlans" : 2,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 0,
"indexBounds" : {
"values.x" : [
[
2,
2
]
],
"values.y" : [
[
{
"$minElement" : 1
},
{
"$maxElement" : 1
}
]
]
},
"server" : "localhost:27017"
}
MongoDB 索引和复合索引对仅覆盖第一个字段的值有什么价值?