Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

350
Visualizações
Can I index the keys of a object-type subdocument in MongoDB?

Is there any way where I can index my collection according to the keys of a subdocument of object type? And the keys are not uniform in all the documents, different documents have different keys, but there are some common keys. The keys of the subdocument are English words taken from the NLTK words corpus. The document structure is as follows:

{
    _id: 24752893,
    dictionary: {
        attain: {
            language: ....,
            count: ....,
        },
        book: {
            language: ....,
            count: ....,
        },
        obtain: {
            language: ....,
            count: ....,
        },
        ....
    }
},
{
    _id: 6786765789,
    dictionary: {
        book: {
            language: ....,
            count: ....,
        },
        carbon: {
            language: ....,
            count: ....,
        },
        garbage: {
            language: ....,
            count: ....,
        },
        ....
    }
},
........
{
    _id: 76675567,
    dictionary: {
        web: {
            language: ....,
            count: ....,
        },
        obtain: {
            language: ....,
            count: ....,
        },
        carbon: {
            language: ....,
            count: ....,
        },
        ....
    }
}

I want to index according to the keys of the object type dictionary field, i.e. the English words in order to speed up searching. I am using MongoDB version 4.4.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

So no, there is no "object keys" index option available for Mongo, what is possible is one of these approaches:

  1. Maintain an array on each document that contains the words it has, have that field indexed, then change your queries to query that field first.

  2. Use wildcard indexes, You should read the wildcard restriction docs to make sure it will answer your query needs as they have some unique behaviours that differ from other index types. The index creation syntax for wildcard is as follows:

db.collection.createIndex( { "dictionary.$**" : 1 } )
over 4 years ago · Santiago Trujillo Relatório

0

dictionary: [
    {
    attain: {
        language: ....,
        count: ....,
    },
    book: {
        language: ....,
        count: ....,
    },
    obtain: {
        language: ....,
        count: ....,
    }
}
]

--------------or use Attribute Pattern------------

dictionary: [
    
    {
        k:'attain',
        language: ....,
        count: ....,
    },
    {
        k:'book',
        language: ....,
        count: ....,
    },
    {
        k:'obtain',
        language: ....,
        count: ....,
    }

]

use $elemMatch to find the proper subset, your schema design is wrong Modify your schema like this and use multikey index. https://docs.mongodb.com/manual/core/index-multikey/

db.collection.createIndex( { "dictionary.k": 1, "dictionary.language": 1,"dictionary.count":1 } )

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda