Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda