NodeJS + Mongo - 如何获取集合的内容?

Posted

技术标签:

【中文标题】NodeJS + Mongo - 如何获取集合的内容?【英文标题】:NodeJS + Mongo - how to get the contents of collection? 【发布时间】: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'

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

【问题讨论】:

【参考方案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 并退出函数。

以上是关于NodeJS + Mongo - 如何获取集合的内容?的主要内容,如果未能解决你的问题,请参考以下文章

nodejs , mongo find 没有返回数据

在 nodejs 脚本中列出 mongo 数据库中的所有集合

NodeJS Mongo - Mongoose - 动态集合名称

如何从 mongo db 获取详细信息并在 nodejs Fork 方法中发送或存储在对象中

如何从 mongo db 获取详细信息并在 nodejs Fork 方法中发送或存储在对象中

Mongo:如果孩子在同一个集合中,如何获取相关记录?