ExpressJS mongodb多个查询

我想用两个集合来获取数据。 如何在一个响应中发送这些数据?

这是我的代码:

//RETURN SINGLE QUERYE exports.findById = function(req, res) { //Get Params var querye_id =new BSON.ObjectID(req.params.id); var querye; //Get Single Querye db.collection('queryes', function(err, collection) { collection.findOne({'_id':querye_id}, function(err, item) { querye=item; }); }); //Get Questions and Answers db.collection('questions', function(err, collection) { collection.find().toArray(function(err, items) { querye.questions=items; }); }); //Send Response res.send(querye); }; 

我有变数querye未定义。 如何解决这个问题?

 var async = require('async'); function getQueries(id, callback) { db.collection('queryes', function(err, collection) { collection.findOne({'_id':id}, callback); }); } function getQuestions(callback) { db.collection('questions', function(err, collection) { collection.find().toArray(callback); }); } exports.findById = function(req, res) { var querye_id =new BSON.ObjectID(req.params.id); async.parallel({ querye: async.apply(getQueries, query_id), questions: getQuestions }, function (error, results) { if (error) { res.status(500).send(error); return; } results.querye.questions = results.questions; res.send(results.querye); }); }; 

你应该做的是使用deferreds / promise以瀑布方式得到结果,然后在完成所有事情时返回结果。

我喜欢使用节点的asynchronous库。

https://npmjs.org/package/async

这可以让你排队所有的asynchronousfunction,然后报告成功/失败。 最后你会得到结果。

假设你已经需要asynchronous模块,你的代码看起来像这样。

 exports.findById = function(req, res) { //Get Params var querye_id =new BSON.ObjectID(req.params.id); async.waterfall([ function(callback){ //Get Single Querye db.collection('queryes', function(err, collection) { collection.findOne({'_id':querye_id}, function(err, item) { callback(null, item); }); }); }, function(arg, callback){ //Get Questions and Answers db.collection('questions', function(err, collection) { collection.find().toArray(function(err, items) { arg.questions=items; callback(null, arg); }); }); }],function(err, results){ //Send Response res.send(results); }); };