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 数据库中的所有集合
NodeJS Mongo - Mongoose - 动态集合名称
如何从 mongo db 获取详细信息并在 nodejs Fork 方法中发送或存储在对象中