Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

148
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!