MEAN.JS MissingSchemaError

Я играю с MEAN.JS, чтобы посмотреть, как мне это нравится, и у меня возникла ошибка, которую я обычно могу решить, но на этот раз я не могу понять, что я делаю неправильно.

Я пытаюсь заполнить дочерний объект с помощью метода заполнения мангустов, но теперь я получаю эту ошибку: MissingSchemaError: Schema hasn't been registered for model "topic" Это имеет смысл ... гарантирует, что схема модели «тема» загружена. Я думал, что он должен загружаться в соответствии с порядком загрузки в MEAN.js.

момент.сервер.модель.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Moment Schema
 */
var MomentSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Moment name',
        trim: true
    },
    content: {
        type: String,
        default: '',
        trim: true
    },
    created: {
        type: Date,
        default: Date.now
    },
    topic: {
        type: Schema.ObjectId,
        ref: 'Topic'
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    }
});

mongoose.model('Moment', MomentSchema);

тема.сервер.модель.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
    Schema = mongoose.Schema,
    moment = require('moment-timezone');

/**
 * Topic Schema
 */
var TopicSchema = new Schema({
    name: {
        type: String,
        default: '',
        required: 'Please fill Topic name',
        trim: true
    },
    created: {
        type: Date,
        default: Date.now
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    moments: [
        {
            type: Schema.ObjectId,
            ref: 'Moment'
        }
    ]
});

mongoose.model('Topic', TopicSchema);

Запрос, который вызывает ошибку:

Moment.find().sort('-created').populate('user', 'displayName', 'topic').exec(function(err, moments) { ... }

Что может быть причиной этой ошибки и как ее исправить? Я решал это раньше в других системах узлов, но в среднем я думаю, что мне не хватает чего-то фундаментального.


person Donn Felker    schedule 31.01.2015    source источник


Ответы (1)


Догадаться. Я игнорировал, как правильно использовать populate. Чтобы исправить это, я просто привязал еще один вызов заполнения к другому значению dbRef как таковому:

 Moment.find()
    .sort('-created')
    .populate('user', 'displayName')
    .populate('topic')
    .exec(function(err, moments) { 
        // do stuff with results
    });

Теперь тема и имя пользователя заполнены.

Только что написал себе заметку под названием: RTFM.

person Donn Felker    schedule 31.01.2015