16

我刚开始学习 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()回报为>>>>

那么我在这里做错了什么?为什么我的控制台日志中没有任何数据?提前感谢您的帮助。

4

3 回答 3

31

默认情况下,mongoose 采用单数模型名称并将它们与以复数命名的集合配对,因此 mongoose 在数据库中查找名为“adminLogins”的集合,该集合不存在。您可以在定义架构时将您的集合名称指定为第二个参数:

var adminLogin = new Schema({
    username: String,
    password: String
}, {collection: 'adminLogin'});
于 2013-10-28T05:26:41.713 回答
1

首先只编译一个模型,并将模式作为参数

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 使用模型的复数来命名集合,对不起我的英语......

于 2015-08-19T19:12:14.337 回答
1

在我的 api 的快速路由中注入它时遇到问题,所以我通过@elkhrz 更改了它,首先定义模式,然后编译我想要然后拉的一个模型,如下所示:

app.get('/lists/stored-api', (req, res) => {

    Apis.find(function(err, apis) {

        if (err) return console.error(err);

        res.send(apis);

    });

});

我不会将它发送到正文,我实际上会用它做其他事情,特别是如果您计划将您的 API 制作为基于生产的应用程序。

解决这个问题并阅读呈现数据的可能正确方法: 如何在 Express 中的路由之间传递数据

在处理数据时实践安全程序始终是一个好主意。

于 2019-09-30T13:29:30.857 回答