【问题标题】:mongodb nodejs each vs toArraymongodb nodejs each vs toArray
【发布时间】:2014-09-03 15:53:43
【问题描述】:

我快速浏览了一下,没有找到任何让我满意的答案,但基本上我已经开始使用 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);
                });
            });
        }
    );
});

现在我注意到有一个 .each 函数而不是 .toArray 我更喜欢使用它,因为我可以删除 .count 函数但显然你只能返回一次响应。我想知道你们是否可以用你们的一些 mongo 知识启发我。

properties.find(searchParams).each(function (err, result) {
    return res.json(result);
});

类似的东西,删掉 6 行代码和对数据库的额外调用。

【问题讨论】:

  • 为什么不用result.length 而不是count?
  • 啊谢谢你我不知道这个谢谢这正是我希望听到的那种事情
  • 效果很好,非常感谢!

标签: node.js express node-mongodb-native


【解决方案1】:

count() 仍然可以用 toArray() 剪掉:

   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);
   });

【讨论】:

  • @Ben,如果 properties.find(searchParams) 中的 'searchParams' 是一个 json 对象数组怎么办?我的意思是我需要搜索与多个值匹配的记录?
  • @yadavr,find() 接受一个对象,因此您不能真正将数组传递给它,而是在 searchParams 中。但是,您可以拥有可以搜索与多个值匹配的记录的查询属性。更多信息见 mongodb 文档:docs.mongodb.com/manual/reference/method/db.collection.find
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 1970-01-01
  • 2014-10-19
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
相关资源
最近更新 更多