Lorsque j'exécute collection.find()
dans MongoDB/Node/Express, j'aimerais recevoir un rappel une fois terminé. Quelle est la syntaxe correcte pour cela?
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
}
C'est la syntaxe de rappel correcte, mais ce que find
fournit au rappel est un Cursor
, pas un tableau de documents. Donc, si vous souhaitez que votre rappel fournisse des résultats sous forme de tableau de documents, appelez toArray
sur le curseur pour les renvoyer:
collection.find({'_id':o_id}, function(err, cursor){
cursor.toArray(callback);
db.close();
});
Notez que le rappel de votre fonction doit toujours fournir un paramètre err
pour que l'appelant sache si la requête a fonctionné ou non.
2.x Mise à jour du pilote
find
renvoie maintenant le curseur plutôt que de le fournir via un rappel, donc l'utilisation typique peut être simplifiée pour:
collection.find({'_id': o_id}).toArray(function(err, results) {...});
Ou dans ce cas où un seul document est attendu, il est plus simple à utiliser findOne
:
collection.findOne({'_id': o_id}, function(err, result) {...});
Basé sur la réponse de JohnnyHK, j'ai simplement encapsulé mes appels dans la méthode db.open () et cela a fonctionné. Merci @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);
});
});
});
});
J'espère que cela vous sera utile à titre d'exemple.