NodeJS + Mongoose: MissingSchemaError: Схема не была зарегистрирована для модели "Категория" - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь создать простой блог, где есть посты и категории. В настоящее время статьи могут быть добавлены в родительскую категорию (в будущем они могут быть добавлены в несколько категорий). В категории есть много статей. Вот что я придумал:

Category.js

const CategorySchema = new Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    user: { // I wanted to know what user created the category
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'User'
    }
},
{
    timestamps: true
});

const Category = mongoose.model('categories', CategorySchema);
module.exports = Category;

Article.js

const ArticleSchema = new Schema({
    name: {
        type: String,
        required: true,
        trim: true
    },
    article_body: {
        type: String,
        trim: true
    },
    userId: { 
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'User'
    },
    categoryId: { 
        type: mongoose.Schema.Types.ObjectId, 
        ref: 'Category'
    }
},
{
    timestamps: true
});

const Article = mongoose.model('articles', ArticleSchema);

module.exports = Article;

Когда я пытаюсь загрузить статьи с именами / подробностями их категорий:

Article.find({}).populate('categoryId').sort('name').exec(function(err, articles) {
            if(err) throw err;
            res.send(JSON.stringify(articles));
        });

Я получаю эту ошибку:

MissingSchemaError: Schema hasn't been registered for model "Category".
Use mongoose.model(name, schema)

Я новичок в NoSQL, поэтому я даже не уверен, подходит ли эта структура модели для моего случая (если бы не было лучше использовать вложенный / вложенный документ). Данные (статьи) будут прочитаны посетителями, и посетители смогут фильтровать статьи по категориям.

1 Ответ

0 голосов
/ 09 сентября 2018
const Category = mongoose.model('categories', CategorySchema);

Над строкой написано, что мангуста объявляет модель, которую вы объявляете, categories

categoryId: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Category' // this name does not match to 'categories'
}

Здесь вы говорите, categoryId относится к Category модели!

Итак, проблема в объявлении названия вашей модели. Вы должны использовать одно и то же имя в обеих строках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...