MongoDB + node.js-SQL选择等效

帕特里克·西穆尼奇(PatrikŠimunič)

我对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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章