nodejs+mongodb联表查询问题
发布于 1年前 作者 guang152252326 2353 次浏览

我现在有两个表 一个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() 这里出错

求大神帮助

3 回复

自己解决了 异步的坑 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,都是摸索着用,

这两个表一个是用户提问题,记录问题的表, 一个是用户注册存放用户信息的表

回到顶部