2015-11-01 77 views
0

我有一个猫鼬数据库架构是类似 -猫鼬架构没有登记错误填充字段

'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'但我也想填充一些“类”的架构领域的类似'name, strength' 我已经尝试了这种通过以下方式,但还没有得到服务器所需的响应 -

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

[更新]

我正在上添加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); 

和我的课收集的,当我在蒙戈外壳键入下面的查询内容是 -

db.classes.find(); 

的这个输出是 -

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

回答

1

链上的两个populate通话在一起,使你可以设置的选项每个领域分开:

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

它工作正常,谢谢。我也更新了问题,因为我得到架构未注册的错误我添加此行在我的app.js从其他SO问题“require('./ api/class/class.model');”所以任何确保所有模型在使用前都被正确初始化和注册的方法 – DeadMan

+0

有许多方法可以实现,但常用的方法是创建一个新文件,它需要所有模型,然后像app.js这样的文件需要只是一个文件。 – JohnnyHK

+0

我现在有一个具有字段类的更新用户模式。所以,现在我有了类似query.class和query.user.class的东西,它们都有模式类型'Class',我必须填充它们两个呢?我怎样才能做到这一点 ?你能帮我解决这个问题吗?@JohnnyHK – DeadMan