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

315
Vistas
Nodejs mongodb devuelve una matriz vacía cuando no debería

tengo 2 colecciones en mongodb User y Review, los esquemas son User(_id,firstName,lastName,email,password) y Review(_id, reviewForID,reviewdByID,reviewText), tengo un método de publicación rápida que usaré para devolver el Usuario y todas las reseñas asociadas con ese usuario, pero cuando intento consultar la colección de reseñas, a veces me devuelven una matriz vacía. el error ocurre en la función getReviews(), he comentado la línea que causa el error. no sé qué está causando el error y por qué solo funciona cuando agrego toString()

nota: el propósito de la función getReview() es obtener la matriz de todas las revisiones de la base de datos y agregar esa matriz al objeto userA y luego enviar el objeto userA como respuesta al cliente

 var ObjectId = require('mongodb').ObjectID; //used to query objs by id //parameters are (userid) app.post('/getUserInfo', function (req, res) { var queryObj = { _id: new ObjectId(req.body.userid)}; MongoClient.connect(url, function (err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else //HURRAY!! We are connected. :) { var collection = db.collection('User'); collection.findOne(queryObj, function (err, resultDocument) { if (err) { console.log(err); } else if (resultDocument) { getReviews(resultDocument,res); } else { res.send({"result":"failed"}); } db.close();//Close connection });//collection.find end }//else });//MongoClient.connect end });//get user info end //find all the reviews and add them to the object userA function getReviews(userA,response) { //var queryObj = { reviewForID: userA._id }; returns empty array //var queryObj = { reviewForID: new ObjectId(userA._id) }; returns empty array //var queryObj = { reviewForID: userA._id.toString() }; returns correct documents MongoClient.connect(url, function (err, db) { if (err) { console.log('Unable to connect to the mongoDB server. Error:', err); } else //HURRAY!! We are connected. :) { var collection = db.collection('Review'); collection.find(queryObj).toArray(function (err, result) { if (err) { console.log(err); } else { response.send(result); } db.close();//Close connection });//coolection.find end }//else });//MongoClient.connect end }//get reviews end
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Parece que reviewForID en la colección Review es un campo de tipo String. En esa colección, el valor de la cadena se almacena, mientras que claramente en la colección User _id es del tipo ObjectId, por lo que no obtiene los datos porque hay una falta de coincidencia de tipos.

cuando se llama a toString, básicamente devuelve el valor de cadena que coincide con el tipo de cadena de reviewForID, por eso funciona con toString.

tal vez pueda almacenar reviewForID como tipo ObjectId para hacer una coincidencia directa.

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