【问题标题】:Mongoose select with populate not working猫鼬选择填充不起作用
【发布时间】:2014-05-01 03:25:13
【问题描述】:

我在 mogoose 中进行查询,如果我在查询选择中添加任何参数,则填充参数会丢失,例如我有以下架构:

部门:

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 } ]

是什么让我想知道选择正在破坏填充。 我的猫鼬版本是 3.8.8

【问题讨论】:

  • 你希望select做什么?

标签: node.js mongodb mongoose mongodb-query


【解决方案1】:

试试我的代码:

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

会为你工作!

【讨论】:

    【解决方案2】:

    在 mongoose 中为我工作,这里的 company_name 字段正在通过引用填充 ModelName.find().populate('parent_id', 'company_name') .select('username mobile firstname lastname company_name');

    【讨论】:

      【解决方案3】:

      当然,您只需指定fields you want。目前您只有“电子邮件”,这就是您得到的全部:

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

      【讨论】:

        猜你喜欢
        • 2014-12-19
        • 2013-06-20
        • 1970-01-01
        • 2016-12-24
        • 2021-02-03
        • 2018-06-10
        • 1970-01-01
        • 2015-07-13
        • 2016-10-10
        相关资源
        最近更新 更多