Mongoose查找不起作用。

9
这是我第一次在Node/Express/Mongoose中编写MVC应用程序,所以我真的需要一些帮助。我的.find()命令就是找不到任何东西! :(
结构是我在根目录下有一个/app文件夹,其中包含/models(模式)、/controllers和/views。而app.js位于根目录外面。
在app.js的某个地方:
// all necessary config/setup stuff..
var mongoose = require('mongoose');
mongoose.connect(config.db);
var app = express();
require('./config/routes')(app)

在我的routes.js文件中:
var skills = require('../app/controllers/skills');
app.get('/', skills.showall);

我的控制器 skills.js 包含:

var Skill = require('../models/skill');

exports.showall = function(req, res) {
    Skill.find({}, function(err, docs){
        if (!err) {
            res.render('index', {title: 'Skilldom', skills: docs});
        }
        else {
            throw err;
        }
    });
}

最终,我的模型 skill.js 包含:

var mongoose = require('mongoose');

//Skill schema definition
var skillSchema = new mongoose.Schema({
    name: String,
    length: String,
});

var Skill = mongoose.model('Skill', skillSchema);

module.exports = Skill;

我的索引视图已经渲染,所以我可以看到来自index.jade模板的内容,但是由于某种原因,模型中的查找命令没有获取任何内容。我可以确认我的数据库(在MongoHQ中)有真实数据。
您有什么想法吗?

你是用Mongoose将数据插入到数据库中的,还是通过其他方式实现的? - robertklep
4
在这种情况下,您需要了解Mongoose在存储模型时如何命名集合(例如,Skill模型可能存储在名为skills的集合中)。请参阅文档以了解如何手动设置集合名称。 - robertklep
3个回答

13

将您的Skill.js替换为以下内容

var mongoose = require('mongoose');
mongoose.set('debug', true);

//Skill schema definition

var skillSchema = new mongoose.Schema({
  name: String,
  length: String,
});

var Skill = mongoose.model('Skill', skillSchema);
module.exports = Skill;

之后,您可以在控制台上查看mongoose是否正在执行您的查询。


3

我曾经遇到和你描述的同样的情况,后来发现我没有理解mongoose集合命名的奥妙,在你的代码中,它会尝试加载“skills”,如果在你的mongo中不是这个名称,将不会返回任何内容。我认为应该抛出“没有这样的集合”错误。


0

以下方法为您的集合提供一个替代名称

var skillSchema = new mongoose.Schema({
  name: String,
  length: String,
},{collection : 'Skill'});

or 

var Skill = mongoose.model('Skill', skillSchema,''Skill);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接