我现在有两个表 一个question { “name” : “test”, “faq” : “faq”, "_id" : ObjectId(“521dac0e5a5be3f81e000002”), }
一个info { “name” : “test”, “imgUrl” : “./public/images/11.jpg”, "_id" : ObjectId(“521dac2b5a5be3f81e000004”) }
我的需求是,查询question中的name,然后还有知道name的头像地址,所以要二次查询info中imgUrl
mongodb.open(function(err, db){
if(err){
return callback(err);
}
//读取 users 集合
db.collection('question', function(err, collection){
if(err){
mongodb.close();
return callback(err);
}
//查找用户名 name 值为 name文档
collection.find({hide:{$ne:false}}).limit(5).sort({time:-1}).toArray(function(err,items){
if(err) throw err;
//二次查询
db.collection('info', function(err, collection){
for(var i=0,l=items.length;i<l;i++){
collection.find({name:items[i].name}).toArray(function(err,itens){
var l;
});
}
});
mongodb.close();
//遍历数据
return callback(items);
});
});
});
这里在查询到collection.find({name:items[i].name}).toArray(function(err,itens){var l;}); 时,这里查询失败,断点始终进入不了var l;上
我用第二种方法有尝试,就是
mongodb.open(function(err, db){
if(err){
return callback(err);
}
//读取 users 集合
db.collection('question', function(err, collection){
if(err){
mongodb.close();
return callback(err);
}
//查找用户名 name 值为 name文档
collection.find({hide:{$ne:false}}).limit(5).sort({time:-1}).toArray(function(err,items){
if(err) throw err;
mongodb.close();
//遍历数据
return callback(items);
});
});
});
这个查询完后,我先把items中的name放到一个数组,然后 再次打开mongodb.open 遍历查找
这样两种查询都无法二次查到info 表里面的内容,每次都是collection.find() 这里出错
求大神帮助
自己解决了 异步的坑 db.collection(‘info’, function(err, collection){
for(var i=0,l=items.length;i<l;i++){
collection.find({name:items[i].name}).toArray(function(err,itens){
var l;
});
}
});
mongodb.close();
这个 mongodb.close();在链接info时就执行了,当具体循环时,mongodb已经关闭,所以无法查询
另外一个坑:
for(var i=0,l=items.length;i<l;i++){
collection.find({name:items[i].name}).toArray(function(err,itens){
var l;
});
}
这个循环异步发出,var l;断点这个是谁先查到数据,谁先返回。
表设计不够好,将这两个信息放在一起 会有什么问题么
恩~第一次用mongodb,都是摸索着用,
这两个表一个是用户提问题,记录问题的表, 一个是用户注册存放用户信息的表