记录可以插入到db中并且可以获取(使用mongoose),但是当我登录mongodb时,它是空的

时间:2016-01-10 09:45:47

标签: node.js mongodb mongoose

我正在按照本教程了解mongoose如何与mongodb交互:http://blog.modulus.io/getting-started-with-mongoose

我创建了一个架构和一个模型。当我保存数据时,我得到一个控制台回调,它给了我一切,我已经保存了。当我找到这些信息时,它也会被注销。但是当我通过终端登录mongo时,使用mydb并执行查询db.mydb.find().pretty(),我没有得到任何结果。

可能是什么问题?我正在使用与教程中完全相同的代码。

这是代码,以防以某种方式帮助找到问题:

这是在app.js

var db = mongoose.connection;

// console errors
db.on('error', console.error);
// load models
db.once('open', function() {
  fs.readdirSync(__dirname = './models/').forEach(function(filename) {
    if(~filename.indexOf('.js')) {require('./models/' + filename)};
  });
});

mongoose.connect('mongodb://localhost/mydb');

*所以它基本上创建连接,从文件夹加载所有模型并控制错误,如果它发生(它没有)。

以下是我的用户模型中的代码:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var usersSchema = new Schema({
    name: String,
    age: Number,
    admin: Boolean
});

var User = mongoose.model('Users', usersSchema);

我在这里插入用户:

    var danny = new User({
    name: 'Danny',
    age: 25,
    admin: true
});
danny.save(function(err, res) {
    if (err) { return console.error(err) };
    console.dir(res);
});

*保存时会注销该用户。

如果我找到所有用户,我会得到同一个用户的列表(因为它被意外保存了多次)。为了找到所有,我使用这个命令:

User.find(function(err, res) {
    console.dir(res);
});

如果我在我的Ubuntu Linux上使用命令mongo登录mongodb,然后我用命令use mydb然后db.mydb.find().pretty()切换到数据库它没有打印出来

1 个答案:

答案 0 :(得分:0)

通过Mongo shell查询数据库时出现了一个小错误。您应该使用db.mydb.find().pretty()

,而不是使用db.users.find().pretty()

原因如下:

您正在使用Mongoose中的这一行连接到您的数据库:

mongoose.connect('mongodb://localhost/mydb');

最后的mydb将是您的数据库的名称。因此,您可能希望将其更改为其他内容,以便将来更容易识别数据库。

在Mongo shell中,您正在使用use mydb正确切换数据库。要查询您的集合,您需要以下语法:

DB + collection name + command() + extra stuff();

这意味着您将获得以下命令:

db.users.find().pretty();

您应该使用users的原因是因为这一行:

var User = mongoose.model('Users', usersSchema);

Users将是您收藏的名称。 请注意如果您使用User,那么Mongoose会添加一个" s"到你的收藏品名称。要覆盖它,您可以使用以下行:

usersSchema('collection', 'user');

现在,您的收藏集将始终显示名称user