如何使用mongoose从MongoDb获取数据?

时间:2013-10-28 05:19:08

标签: javascript node.js mongodb express mongoose

我刚刚开始学习MongoDB和mongoose。目前我有以下结构:

database   -> skeletonDatabase
collection -> adminLogin

当我从命令行运行db.adminLogin.find()时,我得到:

{ "_id" : ObjectId("52lhafkjasfadsfea"), "username" : "xxxx", "password" : "xxxx" }

我的连接 (这样可行,只需加上FYI)

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()返回>>>>

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

3 个答案:

答案 0 :(得分:21)

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

var adminLogin = new Schema({
    username: String,
    password: String
}, {collection: 'adminLogin'});

答案 1 :(得分:0)

首先使用模式作为参数编译一个模型

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

答案 2 :(得分:0)

在将其注入到我的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

在处理数据时始终应遵循安全的程序。