如何使用 mongoose 从 MongoDb 获取数据?
Posted
技术标签:
【中文标题】如何使用 mongoose 从 MongoDb 获取数据?【英文标题】:How to get Data from MongoDb using mongoose? 【发布时间】:2013-11-06 19:15:26 【问题描述】:我刚开始学习 MongoDB 和 mongoose。目前我有以下结构:
database -> skeletonDatabase
collection -> adminLogin
当我从命令行运行 db.adminLogin.find()
时,我得到:
"_id" : ObjectId("52lhafkjasfadsfea"), "username" : "xxxx", "password" : "xxxx"
我的连接 (这有效,只是添加它仅供参考)
module.exports = function(mongoose)
mongoose.connect('mongodb://localhost/skeletonDatabase');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback ()
console.log('Conntected To Mongo Database');
);
我的-js-
module.exports = function(mongoose)
var Schema = mongoose.Schema;
// login schema
var adminLogin = new Schema(
username: String,
password: String
);
var adminLoginModel = mongoose.model('adminLogin', adminLogin);
var adminLogin = mongoose.model("adminLogin");
adminLogin.find(, function(err, data)
console.log(">>>> " + data );
);
我的console.log()
返回为>>>>
那么我在这里做错了什么?为什么我的控制台日志中没有任何数据?提前感谢您的帮助。
【问题讨论】:
【参考方案1】:默认情况下,mongoose 采用单数模型名称并将它们与以复数命名的集合配对,因此 mongoose 正在数据库中查找名为“adminLogins”的集合,该集合不存在。您可以在定义架构时将您的集合名称指定为第二个参数:
var adminLogin = new Schema(
username: String,
password: String
, collection: 'adminLogin');
【讨论】:
这是一个可怕的反特性。我想我在 github 上看到过关于在未来的某个版本中停止它的讨论。如果你使用 express,res.send(data)
发送到浏览器就完成了。
很高兴知道,是的,我正在使用快递。但我对此也有点模糊。我尝试使用res.send(data)
,但无法安静地弄清楚整个响应是如何工作的。我有我的 app.configure 全局以及我的猫鼬连接。所以我正在使用require()
,但不确定如何通过它传递请求。【参考方案2】:
首先编译 一个 模型,并将模式作为参数
var adminLogin = mongoose.model('adminLogin', adminLogin);
在您的代码中 adminLogin 不存在,adminLoginModel 存在;
之后,改为
adminLogin.find(, function(err, data)
console.log(">>>> " + data );
);
试试这个
adminLogin.find(function (err, adminLogins)
if (err) return console.error(err);
console.log(adminLogins);
“s”很重要,因为 mongo 使用模型的复数来命名集合,对不起我的英语......
【讨论】:
【参考方案3】:在我的 api 的快速路由中注入它时遇到问题,所以我通过 @elkhrz 更改了它,首先定义架构,然后编译我想要的模型,然后像这样提取:
app.get('/lists/stored-api', (req, res) =>
Apis.find(function(err, apis)
if (err) return console.error(err);
res.send(apis);
);
);
我不会将它发送到正文,我实际上会用它做其他事情,特别是如果您计划将您的 API 制作为基于生产的应用程序。
解决这个问题并阅读渲染数据的可能正确方法: How to Pass Data Between Routes in Express
在处理数据时实践安全程序总是一个好主意。
【讨论】:
以上是关于如何使用 mongoose 从 MongoDb 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 mongoose 从 mongodb 模式中删除索引?
如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)
如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)