nodejs node findone findbyid collection all node.js mongodb express

node.js - node - Cómo obtener una devolución de llamada en MongoDB collection.find()



mongoose get collection (2)

Cuando ejecuto collection.find() en MongoDB / Node / Express, me gustaría recibir una devolución de llamada cuando haya terminado. ¿Cuál es la sintaxis correcta para esto?

function (id,callback) { var o_id = new BSON.ObjectID(id); db.open(function(err,db){ db.collection(''users'',function(err,collection){ collection.find({''_id'':o_id},function(err,results){ //What''s the correct callback synatax here? db.close(); callback(results); }) //find }) //collection }); //open }


Basado en la respuesta de JohnnyHK simplemente envolví mis llamadas dentro del método db.open () y funcionó. Gracias @JohnnyHK.

app.get(''/answers'', function (req, res){ db.open(function(err,db){ // <------everything wrapped inside this function db.collection(''answer'', function(err, collection) { collection.find().toArray(function(err, items) { console.log(items); res.send(items); }); }); }); });

Espero que sea útil como un ejemplo.


Esa es la sintaxis de devolución de llamada correcta, pero lo que find proporciona a la devolución de llamada es un Cursor , no una matriz de documentos. Por lo tanto, si desea que su devolución de llamada brinde resultados como una matriz de documentos, llame a toArray en el cursor para devolverlos:

collection.find({''_id'':o_id}, function(err, cursor){ cursor.toArray(callback); db.close(); });

Tenga en cuenta que la devolución de llamada de su función aún necesita proporcionar un parámetro err para que la persona que llama sepa si la consulta funcionó o no.

Actualización del controlador 2.x

find ahora devuelve el cursor en lugar de proporcionarlo a través de una devolución de llamada, por lo que el uso típico se puede simplificar a:

collection.find({''_id'': o_id}).toArray(function(err, results) {...});

O en este caso donde se espera un solo documento, es más fácil usar findOne :

collection.findOne({''_id'': o_id}, function(err, result) {...});