Как получить обратный вызов для MongoDB collection.find ()

Когда я запускаю collection.find() в MongoDB / Node / Express, я бы хотел получить обратный вызов, когда он будет завершен. Какой правильный синтаксис для этого?

  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 } 

Это правильный синтаксис обратного вызова, но то, что find для обратного вызова, является Cursor , а не массивом документов. Поэтому, если вы хотите, чтобы ваш обратный вызов предоставил результаты в виде массива документов, вызовите toArray на курсор, чтобы вернуть их:

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

Обратите внимание, что обратный вызов вашей функции по-прежнему должен обеспечивать параметр err чтобы вызывающий абонент знал, работал ли запрос или нет.

Обновление драйвера 2.x

find теперь возвращает курсор, а не предоставляет его посредством обратного вызова, поэтому типичное использование может быть упрощено:

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

Или в этом случае, когда ожидается один документ, проще использовать findOne :

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

Основываясь на ответе JohnnyHK, я просто завернул свои вызовы в метод db.open (), и он сработал. Спасибо @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); }); }); }); }); 

Надеюсь, что это полезно в качестве примера.

  • Node.js - Mongoose - проверьте, существует ли коллекция
  • NodeJS: Как декодировать строку с кодировкой base64 обратно в двоичную?
  • Есть ли способ скомпилировать исходные файлы node.js?
  • Многострочные обновления PostgreSQL в Node.js
  • Как установить node.js в качестве службы Windows?
  • mongodb / mongoose findMany - найти все документы с идентификаторами, перечисленными в массиве
  • выполнение действия очистки непосредственно перед выходом node.js
  • Экспресс следующая функция, для чего это действительно нужно?
  • Как перейти на более раннюю версию Node.js
  • Node.js - найти домашнюю директорию в агностическом режиме платформы
  • Быстрый файловый сервер Node.js (статические файлы через HTTP)
  • Давайте будем гением компьютера.