Você pode criar um índice curinga que ofereça suporte a query em todos os campo de documento possíveis. Os índices curinga suportam query em nomes de campo arbitrários ou desconhecidos.
Para criar um índice curinga em todos os campos (excluindo _id), utilize o especificador curinga ($**) como a chave de índice:
db.<collection>.createIndex( { "$**": <sortOrder> } )
Sobre esta tarefa
Utilize índices curinga somente quando os campos que você deseja indexar forem desconhecidos ou possam mudar. Os índices curinga não funcionam tão bem quanto os índices direcionados em campos específicos. Se sua collection contiver nomes de campo arbitrários que impeçam índices direcionados, considere remodelar seu esquema para ter nomes de campo consistentes. Para saber mais sobre índices direcionados, consulte Crie índices para dar suporte às suas queries.
Antes de começar
Crie uma coleção artwork que contenha os seguintes documentos:
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 } ] )
Cada documento contém detalhes sobre a arte. Os nomes dos campos variam entre documentos, dependendo das informações disponíveis sobre a peça.
Procedimento
A seguinte operação cria um índice curinga em todos os campos do documento na collection artwork (excluindo _id):
db.artwork.createIndex( { "$**" : 1 } )
Resultados
Esse índice oferece suporte a query de campo único em qualquer campo da collection. Se um documento contiver um documento incorporado ou array, o índice curinga atravessará o documento ou array e armazenará o valor de todos os campo no documento ou array.
Por exemplo, o índice suporta a seguinte query:
Query:
db.artwork.find( { "style": "modern" } ) Saída:
[ { _id: ObjectId("6352c401b1fac2ee2e957f09"), name: 'The Scream', artist: 'Edvard Munch', style: 'modern', themes: [ 'humanity', 'horror' ] } ] Query:
db.artwork.find( { "artist.nationality": "French" } ) Saída:
[ { _id: ObjectId("6352c525b1fac2ee2e957f0d"), name: 'Acrobats', artist: { name: 'Raoul Dufy', nationality: 'French', yearBorn: 1877 }, originalTitle: 'Les acrobates', dimensions: [ 65, 49 ] } ] Query:
db.artwork.find( { "materials": "bronze" } ) Saída:
[ { _id: ObjectId("6352c387b1fac2ee2e957f08"), name: 'The Thinker', type: 'sculpture', materials: [ 'bronze' ], year: 1904 } ]
Saiba mais
Para saber como criar um índice curinga que projeta campos específicos a serem cobertos, consulte as seguintes páginas:
Para saber mais sobre comportamentos para índices curinga, consulte: