在所有字段上创建通配符索引

您可以创建支持对所有可能的文档字段进行查询的通配符索引。通配符索引支持对任意或未知字段名称的查询。

要在所有字段(不包括 )上创建通配符索引_id,请使用通配符说明符 ( $**) 作为索引键:

db.<collection>.createIndex( { "$**": <sortOrder> } )

关于此任务

仅当您要索引的字段未知或可能更改时才使用通配符索引。通配符索引在特定字段上的性能不如目标索引。如果您的集合包含阻止目标索引的任意字段名称,请考虑重新建模您的架构以具有一致的字段名称。要了解有关目标索引的更多信息,请参阅 创建索引以支持您的查询。

在你开始之前

创建artwork包含以下文档的集合:

db.artwork.insertMany( [
   {
      "name": "The Scream",
      "artist": "Edvard Munch",
      "style": "modern",
      "themes": [ "humanity", "horror" ]
   },
   {
      "name": "Acrobats",
      "artist": {
         "name": "Raoul Dufy",
         "nationality": "French",
         "yearBorn": 1877
      },
      "originalTitle": "Les acrobates",
      "dimensions": [ 65, 49 ]
   },
   {
      "name": "The Thinker",
      "type": "sculpture",
      "materials": [ "bronze" ],
      "year": 1904
   }
] )

每个文档都包含有关艺术品的详细信息。文档之间的字段名称有所不同,具体取决于有关该作品的可用信息。

步骤

以下操作在artwork集合中的所有文档字段(不包括_id)上创建通配符索引:

db.artwork.createIndex( { "$**" : 1 } )

结果

该索引支持对集合中任意字段的单字段查询。如果文档包含嵌入文档或数组,则通配符索引会遍历文档或数组并存储文档或数组中所有字段的值。

例如,索引支持以下查询:

询问:

db.artwork.find( { "style": "modern" } )

输出:

[
   {
      _id: ObjectId("6352c401b1fac2ee2e957f09"),
      name: 'The Scream',
      artist: 'Edvard Munch',
      style: 'modern',
      themes: [ 'humanity', 'horror' ]
   }
]

询问:

db.artwork.find( { "artist.nationality": "French" } )

输出:

[
   {
      _id: ObjectId("6352c525b1fac2ee2e957f0d"),
      name: 'Acrobats',
      artist: { name: 'Raoul Dufy', nationality: 'French', yearBorn: 1877 },
      originalTitle: 'Les acrobates',
      dimensions: [ 65, 49 ]
   }
]

询问:

db.artwork.find( { "materials": "bronze" } )

输出:

[
   {
      _id: ObjectId("6352c387b1fac2ee2e957f08"),
      name: 'The Thinker',
      type: 'sculpture',
      materials: [ 'bronze' ],
      year: 1904
   }
]

了解更多

要了解如何创建投影要覆盖的特定字段的通配符索引,请参阅以下页面:

要了解有关通配符索引行为的更多信息,请参阅:

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""