Model.find() возвращает пустую в mongoose
Я работаю над mongoose, чтобы перечислить все данные из коллекции в db в mongodb:
из запросов:
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);
}
});
};
У меня уже есть запись в базе данных
Но приведенный выше код возвращается пустым. Почему?
EDIT: следующий код также возвращает пустой:
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
});
Ответы
Ответ 1
Ваша проблема в том, что мангуста плюрализует коллекции. Mongoose запрашивает "организации", но ваши данные находятся в mongodb как "организация". Сделайте их подходящими, и вам должно быть хорошо идти. Вы можете переименовать его в mongodb через оболочку mongo или сообщить об этом мангусте. Из документов mongoose:
var schema = new Schema({ name: String }, { collection: 'actor' });
// or
schema.set('collection', 'actor');
// or
var collectionName = 'actor'
var M = mongoose.model('Actor', schema, collectionName)
Ответ 2
От официального doc
Население - это процесс автоматической замены указанного пути в документе с документами из других коллекций.
Попробуйте его без заполнения
Model.find({}).exec(function(err, models) {
if (err) {
res.render('error', {
status: 500
});
} else {
res.json(models);
}
});
Ответ 3
Я сделаю Peter Lyons ответ проще, добавьте только имя коллекции mongodb (s). Например, если вы создаете коллекцию, которую хотите называть пользователем или паролем, просто напишите s письмо в последнем слове ( пользователи, пароли).