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

257
Views
Cómo consultar documentos de MongoDb utilizando los índices de matrices incrustadas

Estoy tratando de aprender a usar consultas mongo para llegar a lo más profundo de un árbol de datos. Específicamente, estoy tratando de eliminar el objeto debajo de {"object": 'to remove'}

 { "_id" : ObjectId("7840f22736341b09154f7ebf"), "username" : "nmay", "fname" : "Nate", "lname" : "May", "data" : [ { "monthNum" : 1, "year" : 2016, "days" : [ { "date" : "2016-01-01T06:00:00.000Z", "type1" : [], "type2" : [] }, { "date" : "2016-01-02T06:00:00.000Z", "type1" : [ {"object": 'to remove'} ], "type2" : [] } ] } ] }

hasta ahora sé cómo consultar el _id del usuario, pero no estoy seguro de cómo eliminar el objeto deseado usando los índices en cada matriz. En este ejemplo, quiero eliminar data[0].days[1].type1[0]

Aquí está la consulta que tengo hasta ahora:

 app.delete('/user/:id/data/:monthIndex/days/:dayIndex/type1/:type1Index', function (req, res, next) { var monthIndex = parseInt(req.params.monthIndex); // these console the value properly var dayIndex = parseInt(req.params.dayIndex); // -1 is applied to the parameter to translate to array position var type1Index = parseInt(req.params.type1Index); db.users.update( { _id: mongojs.ObjectId(req.params.id) }, { $pull: data.monthIndex.days.dayIndex.type1.type1Index } ); }

me da el error

ReferenceError: los datos no están definidos

¿Alguien puede demostrar cómo puedo pasar esta consulta a mis parámetros de índice para eliminar el objeto deseado?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Desafortunadamente, no hay forma de eliminar un elemento de matriz por su índice numérico con una sola operación en MongoDB. Para hacer esto, primero debe desactivar los elementos deseados y luego eliminar los campos resultantes con valores null .

Su código debería ser algo como esto:

 db.users.update( { _id : mongojs.ObjectId(req.params.id) }, { $unset : { 'data.0.days.1.type1.0' : 1 } } ); db.users.update( { _id : mongojs.ObjectId(req.params.id) }, { $pull : { 'data.0.days.1.type1' : null } } );

Editar por @bob: para pasar los parámetros, debe crear la cadena de consulta, que es fea:

 var unset = {}; unset['$unset'] = {}; unset.$unset['data.' + req.params.monthIndex + '.days.' + req.params.dayIndex + '.foods.' + req.params.foodIndex] = 1; db.users.update( { _id : mongojs.ObjectId(req.params.id) }, unset ); var pull = {}; pull['$pull'] = {}; pull.$pull['data.' + req.params.monthIndex + '.days.' + req.params.dayIndex + '.foods'] = null; db.users.update( { _id : mongojs.ObjectId(req.params.id) }, pull );
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!