Mongoosejs:Populate没有返回任何数据

时间:2015-03-13 16:30:23

标签: node.js mongodb express mongoose meanjs

您好我是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();
});

谢谢:)。

2 个答案:

答案 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});
                        }
                });

                }
            });

        }
    });


};