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

597
Visualizações
Índice compuesto donde un campo puede ser nulo MongoDB

¿Cómo puedo crear un índice compuesto en mongo donde uno de los campos puede no estar presente o ser nulo?

Por ejemplo, en los siguientes documentos si creo un índice compuesto nombre+edad. ¿Cómo puedo lograr esto si la edad no está presente o es nula en algunos documentos?

 { name: "Anurag", age: "21", }, { name: "Nitin", },
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Puede crear un índice parcial de la siguiente manera:

 db.contacts.createIndex( { name: 1 }, { partialFilterExpression: { age: { $exists: true } } } )

Explicado:

Según la documentación, los índices parciales solo indexan los documentos de una colección que cumplen una expresión de filtro especificada. Al indexar un subconjunto de los documentos de una colección, los índices parciales tienen requisitos de almacenamiento más bajos y costos de rendimiento reducidos para la creación y el mantenimiento de índices. En este caso particular, imagine que su colección tiene 100k documentos, pero solo 5 documentos tienen el campo "edad", en este caso, el índice parcial incluirá solo esos 5 campos en el índice, optimizando el espacio de almacenamiento del índice y brindando un mejor rendimiento.

Para que el optimizador de consultas elija este índice parcial, el predicado de la consulta debe incluir una condición en el campo de nombre, así como una coincidencia no nula en el campo de edad.

Las siguientes consultas de ejemplo podrán usar el índice:

 db.contacts.find({name:"John"}) db.contacts.find({name:"John",age:{$gt:20}}) db.contacts.find({name:"John",age:30})

La siguiente consulta de ejemplo es una "consulta cubierta" basada en este índice:

 db.contacts.find({name:"John",age:30},{_id:0,name:1,age:1})

(esta consulta será muy eficiente ya que devuelve los datos directamente desde el índice)

Las siguientes consultas de ejemplo no podrán usar el índice:

 db.contacts.find({name:"John",age:{$exists:false}}) db.contacts.find({name:"John",age:null}) db.contacts.find({age:20})

Tenga en cuenta que debe realizar un análisis si necesita buscar en el campo de edad junto con el nombre, ya que el campo de nombre tiene una muy buena selectividad y este índice no se utilizará en caso de que busque solo por edad, tal vez una buena La opción es crear un índice disperso/parcial adicional solo en el campo de edad para que pueda obtener una lista con contactos de cierta edad si este es un posible caso de uso de búsqueda.

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