我使用express和mongoDb处理node.js。
我正在尝试从数据库“local”和集合“borrower”中检索数据并将其推送到空数组collectionOne
。它在视图页面上呈现此数组。
我想在此输出中使用数组b_ids
中的_id来调用同一路由器下的company_details
集合。
我在这里遇到的问题是,在调用b_ids
集合时尝试访问它时,我在数组company_details
中没有获得任何值。
代码如下:
var collectionOne = [];
var collectionTwo = [];
var b_ids = [];
router.get('/fetch',function(req, res, next){
MongoClient.connect('mongodb://localhost:27017/local', function(err, db){
var collection = db.collection('borrower');
db.collection("borrower", function(err, collection) {
collection.find().toArray(function(err, result) {
if (err) {
throw err;
} else {
//console.log(result[0].first_name);
for (i=0; i<result.length; i++) {
collectionOne[i] = result[i];
b_ids[i] = result[i]._id;
}
}
});
db.collection("company_details", function(err, collection){
console.log(b_ids);
collection.find({borrower_id : {$in :b_ids}}).toArray(function(err, result){
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionTwo[i] = result[i];
}
}
});
});
res.render('index',{data : collectionOne , data1 : collectionTwo});
});
});
});
请建议我如何在此处访问b_ids数组。在此先感谢:)
答案 0 :(得分:3)
来自toArray的回调是异步的,即在console.log行执行后会发生,因此您需要按如下方式重新安排:
var collectionOne = [];
router.get('/fetch',function(req, res, next){
MongoClient.connect('mongodb://localhost:27017/local', function(err, db){
var collection = db.collection('borrower');
db.collection("borrower", function(err, collection) {
collection.find().toArray(function(err, result) {
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionOne[i] = result[i];
b_ids[i] = result[i]._id;
}
db.collection("company_details", function(err, collection){
console.log(b_ids);
collection.find({borrower_id : {$in :b_ids}}).toArray(function(err, result){
if (err) {
throw err;
} else {
for (i=0; i<result.length; i++) {
collectionTwo[i] = result[i];
}
res.render('index',{data : collectionOne , data1 : collectionTwo});
}
});
});
}
});
});
});
这可确保在您尝试记录/呈现回调之前完成回调。
答案 1 :(得分:0)
创建一个带有回调函数作为参数的函数很简单
function returnBids(collection, callback){
collection.find().toArray(function(err, result) {
if (err)
throw err;
else
callback(result)
})
}
,您可以通过调用函数returnbids()
来在外部访问结果。即
returnBids(collection,function(b_ids){
console.log(b_ids)
})