如何使用 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 模式中删除索引?

如何使用 mongoose 从 mongoDB 中获取一定数量的对象? (Node.js)

如何从 1 分钟的嵌套数组数据中聚合 OHLC 5 分钟(mongodb、mongoose)

如何将 MongoDB 查询从 Node.js 驱动程序格式调整为 Mongoose 格式

如何使用 Mongoose 在 MongoDB 中插入 JSON 数组