技术干货 | MongoDB 功能详解之通配符索引的限制(Wildcard Index Restrictions)

随风康康
发布于 2023-5-22 16:25
浏览
0收藏

通配符索引(Wildcard Indexes):MongoDB 4.2 版本中的新功能。

上一篇重点介绍了通配符索引的创建、特性以及注意事项,本篇则是通配符索引的限制,可以视作上一篇内容的附录补充。

不兼容的索引类型或属性

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

📒 注意:

通配符索引与通配符文本索引是不同的,也是不兼容的。通配符索引不能支持使用 $text 操作符的查询。

不支持的查询和聚合模式

字段不存在

通配符索引是稀疏的,不对空字段进行索引。因此,通配符索引不能支持查询某个字段不存在的文档。

例如,考虑到集合中字段 product_attributes 值不存在,则不能支持通配符索引的查询方式。

db.inventory.find( {"product_attributes" : { $exists : false } } )
db.inventory.aggregate([
  { $match : { "product_attributes" : { $exists : false } } }
])

字段等于一个文档或数组

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

例如,通配符索引不能支持以下集合的查询条件:

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" ] } }
}])

字段不等于一个文档或数组

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

例如,通配符索引不能支持以下集合的查询条件:

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 则不能使用通配符索引查询。

例如,通配符索引不能支持以下集合的查询条件:

db.inventory.find( { $ne : [ "product_attributes.tags", null ] } )

db.inventory.aggregate([{
  $match : { $ne : [ "product_attributes.tags", null ] }
}])

分片

你不能使用通配符索引来给一个集合做分片。可以在你想要分片的字段上创建一个非通配符索引。关于 Shard Keys 的更多信息,参见片键(Shard Keys)文档

原文:Wildcard Index Restrictions

关于译者:

刘东方,MongoDB 中文社区成员,现就职于中国联通软件研究院,目前专注于 MongoDB 数据库运维与技术支持。



文章转载自公众号: Mongoing中文社区

分类
标签
已于2023-5-22 16:25:35修改
收藏
回复
举报
回复
    相关推荐