Docs 菜单
Docs 主页
/
MongoDB Manual
/ /

通配符索引限制

在此页面上

  • 不兼容的索引类型或属性
  • 不支持的查询和聚合模式
  • 分片

通配符索引不支持以下索引类型或属性:

  • 多个子句

  • TTL

  • Text

  • 2 d(地理空间)

  • 2 dsphere(地理空间)

  • 哈希

  • Unique

注意

字段存在

通配符索引比较稀疏,不会为空字段编制索引。 因此,通配符索引不支持查询字段存在的文档。

例如,考虑一个集合inventory ,其通配符索引位于product_attributes上。 通配符索引支持以下查询:

db.inventory.find( {"product_attributes" : { $exists : false } } )
db.inventory.aggregate([
{ $match : { "product_attributes" : { $exists : false } } }
])
字段等于文档或数组

通配符索引为文档或数组的内容生成条目,而不是文档/数组本身。 因此,通配符索引不支持精确的文档/数组等值匹配。 通配符索引可以支持字段等于空文档{}的查询。

例如,考虑一个集合inventory ,其通配符索引位于product_attributes上。 通配符索引支持以下查询:

db.inventory.find({ "product_attributes" : { "price" : 29.99 } } )
db.inventory.find({ "product_attributes.tags" : [ "waterproof", "fireproof" ] } )
db.inventory.aggregate([{
$match : { "product_attributes" : { "price" : 29.99 } }
}])
db.inventory.aggregate([{
$match : { "product_attributes.tags" : ["waterproof", "fireproof" ] } }
}])
字段不等于文档或数组

通配符索引为文档或数组的内容生成条目,而不是文档/数组本身。 因此,通配符索引不支持精确的文档/数组不等式匹配。

例如,考虑一个集合inventory ,其通配符索引位于product_attributes上。 通配符索引支持以下查询:

db.inventory.find( { $ne : [ "product_attributes", { "price" : 29.99 } ] } )
db.inventory.find( { $ne : [ "product_attributes.tags", [ "waterproof", "fireproof" ] ] } )
db.inventory.aggregate([{
$match : { $ne : [ "product_attributes", { "price" : 29.99 } ] }
}])
db.inventory.aggregate([{
$match : { $ne : [ "product_attributes.tags", [ "waterproof", "fireproof" ] ] }
}])
数组字段等于或不等于 null

如果给定字段是集合中任何文档中的数组,则通配符索引不支持查询该字段等于或不等于 null 的文档。

例如,考虑一个集合inventory ,其通配符索引位于product_attributes上。 如果product_attributes.tags是集合中任何文档中的数组,则通配符索引支持以下查询:

db.inventory.find( { "product_attributes.tags": { $ne: null } } )
db.inventory.find( { "product_attributes.tags": null } )
db.inventory.aggregate([{
$match : { "product_attributes.tags": { $ne: null } }
}])
db.inventory.aggregate([{
$match : { "product_attributes.tags": null }
}])
字段等于 null

通配符索引不支持查询字段等于 null 的文档。 查询{ $eq: null }匹配字段为 null 或缺失的所有文档。 通配符为稀疏,这意味着它们不会对缺少索引字段的文档进行索引,因此无法支持 null 匹配。

例如,考虑一个集合inventory ,其通配符索引位于product_attributes上。 通配符索引不支持以下查询:

db.inventory.find( { "product_attributes.price": { $eq: null } } )
db.inventory.aggregate([{
$match : { "product_attributes.price": { $eq: null } }
}])

不能使用通配符索引对collection进行分片。在要分片的一个或多个字段上创建非通配符索引。 有关分片键的选择的更多信息,请参阅片键。

后退

通配符