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

269
Views
Cómo eliminar un subdocumento que coincida con una condición de una matriz de subdocumentos en Mongo DB

Tengo una base de datos MongoDB que contiene documentos en el siguiente formato:

 { "name": "", "surname": "", "ssn": "", "tests": [ { "date": "", "attending": [ { "id": "", "role": "" } ] } ] }

Un documento contiene, para cada persona, una lista de pruebas con su información relativa. Me gustaría eliminar de cada documento solo los subdocumentos (pertenecientes a la matriz de pruebas ) que se realizaron después de una fecha determinada (2019-02-22) y por una enfermera determinada (id = 0187).

Dado que todas las fechas se guardan en formato de cadena , para la comparación de fechas utilicé el operador $dateFromString de la siguiente manera:

 db.Vaccinations.aggregate([ "$match": { "$expr": { "$and": [ { "$gte": [ { "$dateFromString": { "dateString": "$tests.date"}}, ISODate("2019-02-22T00:00:00Z") ]}, { "tests.attending.id" : "0187" } ] } } ])

Sin embargo, no pude usar el operador $pull para eliminar los subdocumentos correspondientes. ¿Es posible hacerlo o es $pull el operador incorrecto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Consulta

  • de las pruebas mantener sólo aquellos
  • o
    • date < "2019-02-22"
    • nurse != "0187"
      De esta manera, una prueba para aprobar debe ser anterior a la fecha o realizada por otra enfermera.
  • nurse != "0187" se verifica usando una ruta "$test.attending.id" para obtener todas las identificaciones de esa prueba (una matriz) y probar que la intersección con ["0187"] está vacía => esa enfermera no No hagas la prueba.

*puede usar updateOne o updateMany según sus necesidades

* No $dateFromString si las fechas tienen el mismo formato, como la comparación YYYY-MM-DD , funcionará, pero en general, guarde las fechas en la base de datos, hace que las cosas sean más fáciles y rápidas.

Código de prueba aquí

 update( {}, [{"$set": {"tests": {"$filter": {"input": "$tests", "cond": {"$or": [{"$lt": ["$$test.date", "2019-02-22"]}, {"$eq": [{"$setIntersection": [["0187"], "$$test.attending.id"]}, []]}]}, "as": "test"}}}}])
over 4 years ago · Santiago Trujillo 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!