首页 文章

mongoose schema在填充字段中没有注册错误

提问于
浏览
0

我有一个mongoose数据库模式,类似于 -

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Discussion Question Schema
 */
var QuerySchema = new Schema({
    date: {
        type: Date,
        default: Date
    },
    user: {
        type: Schema.ObjectId,
        ref: 'User'
    },
    class: {
        type: Schema.ObjectId,
        ref: 'Class'
    }
});

module.exports = mongoose.model('Query',  QuerySchema);

现在我想填充用户架构和类架构的一些字段而不是所有字段,所以如何在快速控制器中执行此操作

var query = Query.find({}).populate('user','name email avatar');
    query.paginate(options,function(err, resp){
        if(err) { return handleError(res, err); }
        console.log(resp);
        return res.status(200).json(resp.results);
    });

所以我只填充 'user' 架构的 'name email avatar' ,但我也想填充'class'架构的一些字段,如 'name, strength' 我已经尝试了以下方法,但没有从服务器获得所需的响应 -

var query = Query.find({}).populate('user class','name email avatar');
var query = Query.find({}).populate('user','name email avatar class');

[UPDATE]

class 添加到填充的字段列表时出现以下错误

E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\connection.js:660
    throw new MongooseError.MissingSchemaError(name);
    ^
MissingSchemaError: Schema hasn't been registered for model "Class".
Use mongoose.model(name, schema)
    at NativeConnection.Connection.model (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\connection.js:660:11)
    at getModelsMapForPopulate (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\model.js:2366:26)
    at populate (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\model.js:2207:15)
    at Function.Model.populate (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\model.js:2177:5)
    at Immediate.cb (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\lib\query.js:1011:16)
    at Immediate._onImmediate (E:\work\01India\applications-tests\themeforest-8437259-angulr-bootstrap-admin-web-app-with-angularjs\node_modules\mongoose\node_modules\mquery\lib\utils.js:137:16)
    at processImmediate [as _immediateCallback] (timers.js:374:17)

我的类架构如下 -

'use strict';

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Class Schema
 */
var ClassSchema = new Schema({
    date: {
        type: Date,
        default: Date
    },
    class: {
        type: String,
        enum: ['10','12']
    },
    subjects: [{
        type: Schema.ObjectId,
        ref: 'Subject'
    }]
});

module.exports = mongoose.model('Class',  ClassSchema);

当我在mongo shell中键入以下查询时,我的类集合的内容是 -

db.classes.find();

输出是 -

{ "_id" : ObjectId("5635f365e21a4b9015904e08"), "subjects" : [ "5635f365e21a4b9015904e08", "56360f5029a82c0823eac2b8" ], "date" : ISODate("2015-11-01T11:11:33Z"), "__v" : 0, "class" : "10" }

1 回答

  • 1

    链两个populate一起调用,以便您可以分别设置每个字段的选项:

    var query = Query.find({}).populate('user','name email avatar')
                              .populate('class','name strength');
    

相关问题