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 endParece 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.