我对node.js和mongodb相当陌生。我需要一个函数,该函数将返回一个包含数据库结果的数组。当我在php中查询“ SELECT * FROM table”时,它返回数组或对象数组。但是使用node和mongo时,我必须使用大量代码,这对我来说似乎是不必要的。所以我写了这个函数:
select: function (table, terms) {
var rows = [];
var find = function (error, db) {
var collection = db.collection(table);
var docs = collection.find(terms);
docs.each(function (error, doc) {
rows.push(doc);
});
};
client.connect(url, find);
return rows;
}
它以表名[string]和术语[js object]作为参数。我想此函数返回如下数组:[{doc1},{doc2},{doc3},...]。当我记录变量doc时,在每个函数中都可以-有效的javascript对象。但是当我在推送所有文档后记录变量行时,它为空-[]。函数select()的结果也是空数组-[]。
拜托,有没有人知道可能是什么问题或使用类似的方法从MongoDB中获取数据?谢谢
connect函数是异步的,在您的return语句之后完成。将您的return语句放在docs.each(.....)的右括号之后,放在回调函数中。这样,您确定您的return语句将在填充数组后执行。
进行完整性编辑:return语句当然不起作用,因为它从find中的函数返回。使用回调函数。
像这样:
select: function (table, terms, cb) {
var rows = [];
var find = function (error, db) {
var collection = db.collection(table);
var docs = collection.find(terms);
docs.each(function (error, doc) {
rows.push(doc);
});
cb(error, rows);
};
client.connect(url, find);
}
编辑:上面的示例(cb函数而不是返回)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句