保存Mongoose嵌套模式
我有一个问题,保存嵌套的subdocs – 不知道是否因为它不是一个数组或什么 – 文档似乎表明,嵌套的对象是自动保存,但他们不是在这种情况下。
一个小孩模式:
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" } });
这些都不会起作用。
创build文档不会抛出错误,但不保存subdoc
var a = new Address({ phone: 000 }); var o = new Order({ address: a }).save();
这给了一个Cast到ObjectId失败的错误:
var o = new Order({ address: { phone: 000 } }).save();
这似乎工作的唯一方法是通过首先保存subdocs我想避免,因为我有多个地址,所以有点混乱。
奇怪的是,我从来没有遇到过这个问题 – 任何想法?
好。 显然,我们不能使用没有数组的子目录。 请参阅SOpost无embedded式文档的数组? 和错误线程解释推理: https : //github.com/LearnBoost/mongoose/pull/585
主模式中的地址对象应该是Schema.Types.Mixedtypes。 你指定的地址应该是一个ObjectId,这就是为什么你得到Cast到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); };
请注意这是一个使用节点的例子,express