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

155
Visualizações
¿Las restricciones compuestas únicas no funcionan con sureIndex?

Tengo un DB llamado participantes con estructura:

 { _id: '123', infos: [ { myId: 'my123', otherId: 'other123' } ] }

Sin embargo, StudyInfos puede estar vacío y los objetos dentro de StudyInfos pueden contener un myId sin otro Id. Quiero crear un índice único en

 { myId: 1, otherId: 1}

Estoy usando sureIndex así:

 Participants._ensureIndex( { 'infos.myId': 1, 'infos.otherId': 1 }, { unique: true, sparse: true, partialFilterExpression: { 'infos.otherId': { $exists: true, $type: String, $ne: null }, 'infos.myId': { $exists: true, $type: String, $ne: null }, }, }, );

Sin embargo, cuando intento agregar un segundo usuario con información vacía o dos usuarios a los que les falta otro ID, falla debido a un índice duplicado. Básicamente, el único duplicado que no quiero es

 { _id: '123', infos: [ { myId: 'my123', otherId: 'other123' } ] }, { _id: '456', infos: [ { myId: 'my123', otherId: 'other123' } ] },

Pero no está permitiendo:

 { _id: '123', infos: [] }, { _id: '456', infos: [] },

o

 { _id: '123', infos: [ { myId: 'my123', } ] }, { _id: '456', infos: [ { myId: 'my123', } ] },

ya sea a pesar de mi uso de sharedFilterExpression y sparse.

Ayuda.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Respondiendo a mi propia pregunta, eran dos cosas:

  1. No se pueden usar juntas Sparse y PartialFilterExpression, aunque probé versiones de esto sin ambas y todavía no funcionó.
  2. Asegúrese de que el índice esté en desuso, por lo que necesitaba usar Participants.rawCollection().createIndex y eliminar mi índice anterior

Respuesta final:

 Participants.rawCollection().createIndex( { 'infos.myId': 1, 'infos.otherId': 1 }, { unique: true, partialFilterExpression: { 'infos.otherId': { $exists: true }, 'infos.myId': { $exists: true }, }, }, );
about 4 years ago · Juan Pablo Isaza 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