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) {...});