簡體   English   中英

保存貓鼬嵌套模式

[英]Saving Mongoose nested schema

我在保存嵌套的子文檔時遇到問題-不知道是否是因為它不是數組或其他內容-文檔似乎建議嵌套對象是自動保存的,但在這種情況下不是。

子架構:

var Address = new Schema({
  phone: String,
  name: String,
  street: { type: String, required: true }
});

主要架構:

var Order = new Schema({
  code: {
    type: String
  },
  address: {
    type: Schema.Types.ObjectId,
    ref: "Address"
  }
});

這些都不起作用。

創建文檔不會引發錯誤,但不會保存子文檔

var a = new Address({ phone: 000 });

var o = new Order({ address: a }).save();

這會導致Cast to ObjectId失敗錯誤:

var o = new Order({ address: { phone: 000 } }).save();

這似乎可行的唯一方法是先保存子文檔,由於我有多個地址,因此我要避免,因此有點混亂。

我從未遇到過這個問題很奇怪-有什么想法嗎?

好。 顯然,沒有數組我們就不能使用子文檔。 看到沒有數組的嵌入式文檔嗎? 和解釋推理的錯誤線程: https//github.com/LearnBoost/mongoose/pull/585

主模式中的地址對象應為Schema.Types.Mixed類型。 您指定的地址應該是一個ObjectId,這就是為什么出現Cast to ObjectId錯誤的原因。

參見http://mongoosejs.com/docs/schematypes.html

例:

var Order = new Schema({
  code: {
    type: String
  },
  address: {
    type: Schema.Types.Mixed,
    ref: "Address"
  }
});

好。 如果只需要一個帶有子字段的字段,而無需其他模式,則可以采用以下方式:

var Order = new Schema({
  code: {
    type: String
  },
  address: {
    phone: String,
    name: String,
    street: { type: String, required: true }
  }
});

要使其保存地址模式,您需要在函數中保存順序的所有步驟是:var Address = mongoose.model('Address'); var Order = mongoose.model('Order');

export.createAddress =  function( req, res) {
   var address =  new Address({phone: 000});
    address.save(callback function);
};

對於Order模式,您需要做的是:

export.createOrder =  function( req, res){
   var order = new Order(req.body);
    order.address = req.address;
    order.save(callback function);
}; 

請注意,這是一個使用節點的示例,表示

暫無
暫無

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

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