Cómo obtener una callback en MongoDB collection.find ()

Cuando ejecuto collection.find() en MongoDB / Node / Express, me gustaría recibir una callback cuando haya terminado. ¿Cuál es la syntax 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 } 

Esa es la syntax de callback correcta, pero lo que find proporciona a la callback es un Cursor , no una matriz de documentos. Por lo tanto, si desea que su callback 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 callback 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 callback, 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) {...}); 

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.