userMetadata
字段下捕获用户定义的数据 并支持查询该数据:userMetadata
的任何子字段的查询。userMetadata
可以支持单场查询userMetadata
, userMetadata.likes
,userMetadata.dislikes
,和 userMetadata.age
:userMetadata
上的非通配符索引只能支持对userMetadata
的查询。[warning] 重要
fieldA
的所有值。如果字段是嵌套的文档或数组,通配符索引将递归到文档/数组中,并存储文档/数组中所有字段的值。product_catalog
集合中的文档可能包含product_attributes
字段。product_attributes
字段可以包含任意嵌套的字段,包括嵌入的文档和数组:product_attributes
字段上创建一个通配符索引:product_attributes
或其内嵌字段的任意单字段查询:[success] 注意
_id
),指定“$**”
作为索引键:[success] 注意
[success] 注意
[success] 注意
_id
字段。要在通配符索引中包含_id
字段,必须显式地将其包含在wildcardProjection文档中(即**{“_id”:1}**)。parentField
的通配符索引记录了以下条目:"parentField.nestedField" : "nestedValue"
"parentField.nestedObject.deeplyNestedField" : "deeplyNestedValue"
"parentField.nestedArray" : "nestedArrayElementOne"
"parentField.nestedArray" : ["nestedArrayElementTwo"]
parentField.nestedArray
不包含每个元素的数组位置。当将元素记录到索引中时,通配符索引会忽略数组元素的位置。通配符索引仍然可以支持包含显式数组索引的查询。有关更多信息,请参见具有显式数组索引的查询。parentField
的通配符索引向下遍历对象并索引其内容:"parentField.nestedField" : "nestedValue"
"parentField.nestedObject.deeplyNestedField" : "deeplyNestedValue"
"parentField.nestedArray" : "nestedElement"
parentArray
的通配符索引向下到数组中遍历和索引它的内容:"parentArray" : "arrayElementOne"
"parentArray" : ["embeddedArrayElement"]
"parentArray.nestedObject.nestedArray" : "nestedArrayElementOne"
"parentArray.nestedObject.nestedArray" : "nestedArrayElementTwo"
parentField.nestedArray
不包含每个元素的数组位置。当将元素记录到索引中时,通配符索引会忽略数组元素的位置。通配符索引仍然可以支持包含显式数组索引的查询。有关更多信息,请参见 具有显式数组索引的查询。_id
并仅包括查询字段。employees
集合上的以下通配符索引:lastName
对象永远不是数组,MongoDB可以使用$**
通配符索引来支持覆盖查询。sort()
指定唯一的查询谓词场。products
集合上的通配符索引:product_attributes.price
和种类在同一领域:parentArray.0.nestedArray.0
)的字段路径的查询 。由于为每个连续的嵌套数组定义索引范围的复杂性越来越高,因此,如果该路径包含的8
显式数组索引不多,MongoDB不会考虑使用通配符索引来回答查询中的给定字段路径。MongoDB仍然可以考虑使用通配符索引来回答查询中的其他字段路径。parentObject
,以满足以下查询:"parentObject.nestedArray.0" : "elementOne"
"parentObject.nestedArray.1.deeplyNestedArray.0" : "elementTwo"
"parentObject.nestedArray" : "elementOne"
"parentObject.nestedArray.deeplyNestedArray" : "elementTwo"