簡體   English   中英

使用mongoose在MongoDB中創建記錄時填充數組

[英]Populating an array when creating a record in MongoDB with mongoose

我正在編寫一個跟蹤成員及其證書的應用程序。 每個成員都有一些數組,這些數組引用了Mongoose人口文檔中所述的其他模型。

Member架構

{
  name: {
    first: String,
    last: String
  },
  unit: Number,

  // more stuff

  class_year: Number,
  campus_box: String,
  campus_address: String,

  // more stuff

  emails: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Email' }],
  certifications: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Certification' }],
  service_credits: [{ type: mongoose.Schema.Types.ObjectId, ref: 'ServiceCredit' }]
}

Certification架構

{
  type: String,
  issue: Date,
  expiry: Date,
  number: String,
  _member: { type: mongoose.Schema.Types.ObjectId, ref: 'Member' }
}

EmailServiceCredit_member相似,因為它們都有_member字段。

創建Email ,它將添加到Email模型中,隨后我可以執行

var Email = mongoose.model('Email');
Email.findOne().populate('_member').exec(function (err, email) {
  console.log(email._member.name.first);
});

但是,它沒有添加到Member模式的數組中,因為當我運行時

var Member = mongoose.model('Member');
Member.findOne().populate('emails').exec(function (err, member) {
  res.json(200, member);
});

我收到emails: []在JSON中,這顯然是與該成員相關聯的Email

我已經閱讀過Mongoose API,該文檔本身需要填充,因此,我嘗試使用以下方法執行http://mongoosejs.com/docs/api.html#document_Document-populate引用的內容:

var Member = mongoose.model('Member');
Member.findOne({ _id: req.session.member._id }, function (err, member) {
  member.populate('emails', function (err) {
    console.log('populated emails');
  });
});

但是我得到了錯誤:( (member's JSON data) has no method 'populate' 我知道我正在嘗試populate錯誤的內容,但是我不知道正確的方法是什么。

我在填充數組時也遇到了問題,您定義的架構將為每個數組元素創建一個子文檔(嘗試轉儲數組)。

嘗試將架構更改為:

emails: [ type: mongoose.Schema.Types.ObjectId ]

和使用

Member.findOne().populate({ path: 'emails', model: 'Email' }).exec(function (err, member) {
    res.json(200, member);
});

填充數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM