我正在使用mongoose列出mongodb中db中集合的所有数据:
来自请求:
http://localhost:3000/listdoc?model=Organization
我正在执行以下代码:
exports.listDoc = function(req, res) {
var Model = mongoose.model(req.query.model); //This is defined and returns my desired model name
Model.find().populate('name').exec(function(err, models) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.jsonp(models);
}
});
};
我已经在数据库中输入了 但上面的代码返回空。为什么呢?
编辑:以下代码也返回空:
exports.listDoc = function(req, res) {
var Model = mongoose.model(req.query.model);
Model.find({},function(err,models){
console.log(models);
if (err) {
res.render('error', {
status: 500
});
} else {
res.jsonp(models);
}
});
};
使用的架构:
var Organization = mongoose.Schema({
name: String
});
答案 0 :(得分:64)
你的问题是mongoose复数集合。 Mongoose正在查询“组织”,但您的数据是mongodb作为“组织”。让它们匹配,你应该很高兴。你可以通过mongo shell在mongodb中重命名它,或者告诉mongoose。来自mongoose docs:
var schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)
答案 1 :(得分:0)
来自官方doc
人口是自动替换指定的过程 文档中包含来自其他集合的文档的路径。
尝试不用填充
Model.find({}).exec(function(err, models) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.json(models);
}
});
答案 2 :(得分:0)
我会更简单地使 Peter Lyons 回答,只添加mongodb集合名称( s letter ) 。例如,如果您创建要调用用户或密码的集合,只需在最后一个单词中写 s 字母( 用户 , 密码 )。