mongooseselect与填充不工作

我在mogoose查询,如果我添加查询select任何参数,填充参数丢失,例如我有以下模式:

部:

var mongoose = require('mongoose'); var schema = mongoose.Schema({ name: {type:String,required: true,index: {unique: true}} , text: String }) module.exports=mongoose.model('Department',schema); 

雇员:

 var mongoose = require('mongoose'); var ObjectId=mongoose.Schema.ObjectId; var schema = mongoose.Schema({ name: {type:String,required: true} , lastName: {type:String} , birthday:Date, email:{type:String,required: true,index: {unique: true}}, _department:{type:ObjectId,ref:'Department'}, isUser:Boolean },{ strict:false}); module.exports=mongoose.model('Employee',schema); 

如果我做:

 var query=mongoose.model('Employee').find(); query.select('email').populate('_department','name'); query.exec(function(err,data){ console.log(data); }); 

我得到以下输出

  [ { email: 'email@email.com.br', _id: 532e570864803bf505e51c81 } ] 

我会期待这一点:

 [ { _department: { _id: 532c77c3485925d806436981, name: 'bar' }, email: 'email@email.com.br', _id: 532e570864803bf505e51c81, __v: 0 } ] 

如果我做出如下:

 var query=mongoose.model('Employee').find(); query.populate('_department','name'); query.exec(function(err,data){ console.log(data); }); 

我得到这个输出

 [ { _department: { _id: 532c77c3485925d806436981, name: 'bar' }, name: 'mimimi', email: 'email@email.com.br', _id: 532e570864803bf505e51c81, __v: 0 } ] 

什么让我怀疑,select是打破人口。 我的mongoose版本是3.8.8

当然你只是指定你想要的领域 。 目前你只有“电子邮件”,所以你得到的只是:

 var query=mongoose.model('Employee').find(); query.select('email _department').populate('_department','name'); query.exec(function(err,data){ console.log(data); }); 

在这里工作在mongoose和这里company_name字段是通过引用ModelName.find()填充('parent_id','company_name').select('用户名移动firstname lastname company_name')填充。

试试我的代码:

 const Employee= require('../models/employee'); Employee.find({}, 'email _department') .populate('_department', ['name']) .exec(function(err, list_employee) { if (err) { return next(err); } //Successful console.log(list_employee); }); 

将为你工作!