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集合改怎么处理,请大神们什么赐教,不胜感激
可以直接将两个集合查出来传到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这个不太懂,请大神略说一二
优雅。学习了
最终是怎么写的呢?
如果选择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 给力 多谢了
这个也是我正需要的,谢谢!