Node.js mongodb节点分别与toArray对抗

Node.js mongodb节点分别与toArray对抗,node.js,express,node-mongodb-native,Node.js,Express,Node Mongodb Native,我快速浏览了一下,没有找到任何让我满意的答案,但基本上我已经开始使用node.js与express和mongodb一起创建webapi,而不是通常的.Net MVC Web API路线 但我注意到的一件事是,为了返回一组结果,我正在以一种相当庞大的方式进行操作,或者至少是这样的感觉 app.get('/property', function (req, res) { var propArray = []; MongoClient.connect(settings.connecti

我快速浏览了一下,没有找到任何让我满意的答案,但基本上我已经开始使用node.js与express和mongodb一起创建webapi,而不是通常的.Net MVC Web API路线

但我注意到的一件事是,为了返回一组结果,我正在以一种相当庞大的方式进行操作,或者至少是这样的感觉

app.get('/property', function (req, res) {
    var propArray = [];
    MongoClient.connect(settings.connection,
        function (err, db) {
            if (err) throw err;

            var properties = db.collection("PROPERTIES");

            var searchParams = {
                Active: true,
                Deleted: false
            }

            properties.count(searchParams, function (err, count) {
                properties.find(searchParams).toArray(function (err, result) {
                    for (i = 0; i < count; i++)
                        propArray.push(new models.propertyModel(result[i]));

                    db.close();

                    return res.json(propArray);
                });
            });
        }
    );
});
类似于这样,删掉6行代码和对数据库的额外调用。

使用toArray()仍然可以删掉count():

properties.find(searchParams).toArray(函数(err,result){
变量i,计数;
对于(i=0,count=result.length;i
为什么不使用只使用
结果.长度
而不使用
计数
?啊,谢谢你,我不知道这个,谢谢,这正是我想说的,它工作得很好,非常感谢@Ben,如果properties.find(searchParams)中的“searchParams”是json对象的数组呢?我的意思是我需要搜索与多个值匹配的记录?@yadavr,find()接受一个对象,所以你不能真正将数组传递给它,而是在searchParams中。但是,您可以使用查询属性来搜索与多个值匹配的记录。请参阅mongodb文档了解更多信息:
properties.find(searchParams).each(function (err, result) {
    return res.json(result);
});
   properties.find(searchParams).toArray(function (err, result) {
     var i, count;
     for (i = 0, count = result.length; i < count; i++) {
       propArray.push(new models.propertyModel(result[i]));
     }
     db.close();
     return res.json(propArray);
   });