在mongoose中引用SubDocument时无法填充

时间:2016-04-01 12:55:45

标签: node.js mongodb express mongoose

我有一个包含三个相关模型的数据库,这里是mongoose模式

// models/company.js
let companySchema = new Schema({
    rut         : String,
    name        : String,
    owner       : { type: Schema.Types.ObjectId, ref : 'User'  }
})
export default mongoose.model('Company', companySchema)

// models/account.js
let accountSchema = new Schema({
    code      : String,
    name      : String,
    type      : {
        id    : Number,
        name  : String
    }
})
// I have two different exports, because sometimes I just need the schema,
// and others I need the model
export default accountSchema
export const Account = mongoose.model('Account', accountSchema)

// models/mayor.js
let mayorSchema = new Schema({
    account     : { type: Schema.Types.ObjectId, ref : 'Account' },
    company     : { type: Schema.Types.ObjectId, ref : 'Company' },
    month       : Number,
    year        : Number,
    data        : [{
        date    : Date,
        detail  : String            
    }]
})
export default mongoose.model('Mayor', mayorSchema)

我想从Mayor查询我的mayorSchema模型,我的查询是这样的

import {Account} from '../models/account'
import Company from '../models/company'
import Mayor from '../models/mayor'

Mayor
    .find({ 'company' : companyId, 'month' : month, 'year' : year })
    .populate('company')
    .populate('account')
    .exec((err, mayores) => {
      if (err) {
        console.log(JSON.stringify(err))
        res.status(500)
        res.json({
          code: "001",
          message: "Some error with the server. Please try later"
        })
      } else {
        res.status(200)
        res.json(mayores)
      }
    })

该查询的结果是一个数组,但是数组中的每个对象都将account属性设置为null。我不知道为什么会发生这种情况,如果我直接在mongo控制台上查询数据,一切都很好,所有文档都正确设置了他们的帐户属性。一些可能有用的知识:

  • 我正在使用express.js,部分符号来自express。
  • 我的帐户资源已正确填充
  • 帐户架构是另一个模型中的子文档(嵌入式),但(帐户)模型已在mongoose中正确注册。
  • 以前使用Mayor.insertMany方法插入的市长集合中的文档,在插入之后,如果我检查刚创建的文档,则会正确设置帐户字段。

那为什么会这样呢?为什么我不能填充我的account字段。我猜这是与子文档引用相关的东西,但我原本预计失败的人口只返回ObjectId,而不是null。

0 个答案:

没有答案