一个页面怎么获取 MongoDB 多个集合的数据
发布于 10 年前 作者 xvzone 14868 次浏览 最后一次编辑是 8 年前 来自 问答

nodejs
数据库:mongoDB 问题:首页想展示的内容包括俩个集合的数据,怎么同时获取这两个集合的数据 现在用的方法是

var db = req.db;
var collection = db.collection('xxx');
collection.find({}).toArray(function(err,data){
             res.render('index',{
			'art_list' : data
		});
})

要获取两个集合怎么做,比如要获取xxx和vvv集合改怎么处理,请大神们什么赐教,不胜感激

15 回复

可以直接将两个集合查出来传到View里啊

collectionA.find().toArray(function(errA, recordsA){
   collectionB.find().toArray(function(errB, recordsB){
       res.render("view", {
         collectionA: recordsA,
         collectionB: recordsB
       });
   });
});

并发访问两个集合

function roll (count, f) {
    var data = {};
    return function (name, err, records) {
        data[name] = { err:err,  records:records };
        count--;
        if (count === 0) {
            f(data);
        }
    };
}

var r = roll(2, function (data) {
    // ...
});
collectionA.find().toArray(function(err, records){
    r('A', err, records);
});
collectionB.find().toArray(function(err, records){
    r('B', err, records);
});

这个一看就明白了,就是将两个套在一起,用内部去传值 非常感谢

这个要好好研究下,用书上的一个词形容:优雅 学习了,谢谢

@xvzone 这个如果你使用async去写,也很优雅~

@kenticny async这个不太懂,请大神略说一二

@xvzone 大神不敢当 我也是初学者 async就是个异步流程控制的类库,就是把好多嵌套回调函数写的美观点~ 内容很多的,我也只是略知一二~ 共同进步吧~async

优雅。学习了

最终是怎么写的呢?

如果选择async的话,你可以这样写: async.parallel({ a:function(cb){ mongo.getData(params_a,function(err,data){ cb(err,data);
})}, b:function(cb){ mongo.getData(params_b,function(err,data){ cb(err,data) })} },function(err,result){ console.dir(result);//{a:a_reuslt,b:b_result} }) 具体可以看async.js的文档

支持,很棒的原生方法,性能、可读性都很好。

用markdown语法啊。这代码看的难受

var db = req.db; var collection = db.collection(‘xxx’); collection.find({aaa}).toArray(function(err,data){ req.session.aaa=data; next(); }) function next (){ collection.find({bbb}).toArray(function(err,data){ req.session.bbb=data; renderview(); }) }

function renderview(){ res.render(‘index’,{ ‘aaa’:req.session.aaa, ‘bbb’:req.session.bbb }); }

req.session存值最优 对了。。这个基于EXPRESS。。。(忘了。。我写习惯了)

恩 你的这个看明白了 和一楼的方法实现方式一样,就是单独都写个function 给力 多谢了

这个也是我正需要的,谢谢!

回到顶部