Menu Docs
Página inicial do Docs
/ /

Criar um Índice Curinga em um Campo Único

Índices curinga em um único campo suportam consultas em qualquer subcampo do campo indexado. Use índices curinga para dar suporte a queries sobre nomes de campo que você não conhece com antecedência ou que variam entre documentos.

Para criar um índice curinga em um único campo, utilize o método db.collection.createIndex() e inclua o especificador curinga ($**) na chave do índice:

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

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 campos arbitrários que impeçam índices direcionados, considere remodelar seu esquema para ter nomes de campos consistentes. Para saber mais sobre índices direcionados, consulte Crie índices para oferecer suporte a queries.

Crie uma coleção de products que contenha os seguintes documentos:

db.products.insertMany( [
{
"product_name" : "Spy Coat",
"attributes" : {
"material" : [ "Tweed", "Wool", "Leather" ],
"size" : {
"length" : 72,
"units" : "inches"
}
}
},
{
"product_name" : "Spy Pen",
"attributes" : {
"colors" : [ "Blue", "Black" ],
"secret_feature" : {
"name" : "laser",
"power" : "1000",
"units" : "watts",
}
}
}
] )

A seguinte operação cria um índice curinga no campo attributes :

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

O índice curinga suporta queries de campo único no attributes ou seus campos incorporados. Por exemplo, o índice suporta as seguintes queries:

  • Query:

    db.products.find( { "attributes.size.length" : { $gt : 60 } } )

    Saída:

    [
    {
    _id: ObjectId("63472196b1fac2ee2e957ef6"),
    product_name: 'Spy Coat',
    attributes: {
    material: [ 'Tweed', 'Wool', 'Leather' ],
    size: { length: 72, units: 'inches' }
    }
    }
    ]
  • Query:

    db.products.find( { "attributes.material" : "Leather" } )

    Saída:

    [
    {
    _id: ObjectId("63472196b1fac2ee2e957ef6"),
    product_name: 'Spy Coat',
    attributes: {
    material: [ 'Tweed', 'Wool', 'Leather' ],
    size: { length: 72, units: 'inches' }
    }
    }
    ]
  • Query:

    db.products.find(
    { "attributes.secret_feature.name" : "laser" },
    { "_id": 0, "product_name": 1, "attributes.colors": 1 }
    )

    Saída:

    [
    {
    product_name: 'Spy Pen',
    attributes: { colors: [ 'Blue', 'Black' ] }
    }
    ]

Os índices curinga têm um comportamento específico quando o campo indexado contém um objeto incorporado (por exemplo, attributes.secret_feature). Para obter mais informações, consulte Índices curinga em objetos e arrays incorporados.

Para saber mais sobre comportamentos e casos de uso de índices curinga, consulte:

Voltar

Curinga

Nesta página