【问题标题】:NodeJS + Mongo - how to get the contents of collection?NodeJS + Mongo - 如何获取集合的内容?
【发布时间】:2012-06-10 21:54:57
【问题描述】:

我正在用 mongo 编写一个简单的 NodeJS 应用程序。为了连接到 mongo,我使用:

var mongo = require('mongodb'),
Server = mongo.Server,
Db = mongo.Db,
ObjectID = require('mongodb').ObjectID;
db.open(function(err,db) {...};

所以,我有数据库“文档”,并且创建了一个名为“公司”的集合。现在它有 4 个对象(记录)。我想以数组的形式获取这个集合的全部内容并逐行显示:

//get companies list
app.get('/companies',function(req,res){
db.collection("companies",function(err,collection){
    collection.find({},function(err, companies) {
        companies.forEach(function(err,company){
                console.log (company);
            }
        );
    });
});
});

但是,Node 向我返回了这样的错误:

TypeError: Object #<Cursor> has no method 'forEach'

有什么想法吗?提前致谢。

【问题讨论】:

    标签: json node.js mongodb


    【解决方案1】:

    在公司上使用 .each,而不是 forEach

    【讨论】:

    • 我强烈建议您使用 Mongoose。节省大量时间。
    • 我今天只想问你:Mongoose和mongodb有什么区别吗?哪个更好?
    • @IlyaRusanen MongoDB 是 NoSQL 数据库。 Mongoose 是一个对象建模工具,可让您定义表示 MongoDB 文档(JSON 对象)的模式
    【解决方案2】:

    传递给find 回调的companies 参数是Cursor 对象,而不是数组。在其上调用toArray 将查询结果转换为对象数组,或调用each 一次处理一个结果。

    【讨论】:

    • 是的,我明白了,谢谢!但是,我想再问一个问题:每个“公司”对象都有几个字段,例如公司名。我正在尝试获取它 console.log (company.company_name);,但它不起作用。它返回“Cannot read property 'company_name' of null” 如果公司是 Cursor 的有效部分,它怎么可能是 null?
    • 当传递给each回调的company参数为空时,这意味着您已经到达光标的末尾(没有更多结果)。
    • 不确定,我已经理解你了,哦。我会尝试阅读您提供的手册,谢谢。但是如何获取当前对象“company”的属性 company_name?
    • 就像你提到的:company.company_name
    • 哦,真丢人 - 我刚刚注意到 o_O 它打印了我 4 个名字,第五个给出了这个错误!这是因为我在这个集合中只有 4 个对象。但我仍然无法得到它 - 如果集合“公司”只有 4 个对象,为什么在打印 4 个 object.names 之后,节点试图得到其他东西并得到一个错误?我想,它应该打印 4 个 compnay_names 并退出函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 2012-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多