您好我是mongoose的新人,我有 填充集合 的问题,它没有返回任何数据,我不知道知道为什么在这里我的代码:
公司模式
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
Agent = mongoose.model('Agent'),
DBRef = mongoose.SchemaTypes.DBRef;
/**
* Company Schema
*/
var CompanySchema = new Schema({
name: {
type: String,
default: '',
//required: 'Please fill Company name',
trim: true
},
created: {
type: Date,
default: Date.now
},
updated: {
type: Date,
default: Date.now
},
address: {
type: String,
default: '',
//required: 'Please fill Company address',
trim: true
},
locked: {
type: Boolean,
default: true,
},
deleted: {
type: Boolean,
default: false,
},
logo: {
type: String,
default: '',
},
email: {
type: String,
default: '',
index: { unique: true }
//required: 'Please fill Company email',
},
tel: {
type: String,
default: '',
//required: 'Please fill Company tel',
},
fax: {
type: String,
default: '',
//required: 'Please fill Company fax',
},
type: {
type: String,
//required: 'Please fill Company type',
trim: true
},
description: {
type: String,
default: '',
trim: true
},
validator: {
type: Schema.ObjectId,
ref: 'User'
},
admins: [Agent]
});
module.exports = mongoose.model('Company', CompanySchema);
代理商型号
'use strict';
/**
* Module dependencies.
*/
var mongoose = require('mongoose'),
Schema = mongoose.Schema,
//Company = mongoose.model('Company'),
DBRef = mongoose.SchemaTypes.DBRef;
/**
* Agent Schema
*/
var AgentSchema = new Schema({
// Agent model fields
// ...
firstname: {
type: String,
default: ''
},
lastname: {
type: String,
default: ''
},
email: {
type: String,
default: '',
index: { unique: true }
},
password: {
type: String,
default: ''
},
roles: {
type: Array,
},
created: {
type: Date,
default: Date.now
},
updated: {
type: Date,
default: Date.now
},
deleted: {
type: Boolean,
default: false
},
locked: {
type: Boolean,
default: false
},
workFor: {
type: Schema.ObjectId,
ref: 'Company'
}
});
module.exports = mongoose.model('Agent', AgentSchema);
填充代码
Company.findById(id).populate('admins').exec(function(err, company) {
if (err) return next(err);
if (!company) return next(new Error('Failed to load Company ' + id));
console.log(company.admins);
req.company = company ;
next();
});
谢谢:)。
答案 0 :(得分:0)
公司的架构定义实际上定义了代理嵌入到公司文档中,而不是引用。如果你想要你可以填充的引用,你应该使用这样的东西:
var CompanySchema = new Schema({
....
admins: [{type: Schema.Types.ObjectId, ref: 'Agent'}],
....
答案 1 :(得分:0)
thnks reto,这是公司的保存代码:
/**
* Create a Company
*/
exports.create = function(req, res) {
var company = new Company(req.body);
User.findById('54e22d19aae0cff01a47df96',function(err,user){
if (err) {
return res.status(400).send({
messages: errorHandler.getErrorMessage(err)
});
}
company.user = user;
req.checkBody('name', 'please fill the name').notEmpty();
req.checkBody('address', 'please fill the address').notEmpty();
req.checkBody('tel', 'please fill a correct phone').notEmpty().isNumeric();
req.checkBody('type', 'please fill the type').notEmpty();
req.checkBody('email', 'please fill a correct email').isEmail();
req.checkBody('admin.firstname', 'please fill the admin firstname').notEmpty();
req.checkBody('admin.lastname', 'please fill the admin lastname').notEmpty();
req.checkBody('admin.email', 'please fill a correct admin email').isEmail();
req.checkBody('admin.password', 'please fill the admin password').notEmpty();
var errors = req.validationErrors();
if (errors) {
return res.status(400).send({
messages: errors
});
}else{
company.save(function(err) {
if (err) {
return res.status(400).send({
messages: errorHandler.getErrorMessage(err)
});
} else {
var agents = preapareAgents(req,company);
Agent.create(agents,function(err){
if(err){
return res.status(400).send({
messages: errorHandler.getErrorMessage(err)
});
}else{
res.jsonp({company: company, agents: agents});
}
});
}
});
}
});
};