我在保存嵌套的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"
}
});
这些都不会起作用。
创建doc不会抛出错误但不保存subdoc
var a = new Address({ phone: 000 });
var o = new Order({ address: a }).save();
这会导致Cast to ObjectId失败错误:
var o = new Order({ address: { phone: 000 } }).save();
这似乎工作的唯一方法是首先保存我想要避免的subdocs,因为我有多个地址所以它有点乱。
我从未遇到过这个问题很奇怪 - 有什么想法吗?
答案 0 :(得分:0)
确定。显然我们不能在没有数组的情况下使用subdocs。请参阅SO帖子Embedded document without Array?和错误线程解释推理:https://github.com/LearnBoost/mongoose/pull/585
答案 1 :(得分:0)
主模式中的地址对象应为Schema.Types.Mixed类型。您指定该地址应该是ObjectId,这就是您将Cast转换为ObjectId错误的原因。
请参阅http://mongoosejs.com/docs/schematypes.html。
示例:
var Order = new Schema({
code: {
type: String
},
address: {
type: Schema.Types.Mixed,
ref: "Address"
}
});
答案 2 :(得分:0)
确定。如果您只需要一个带有子字段的字段,则不需要其他架构,您可以这样:
var Order = new Schema({
code: {
type: String
},
address: {
phone: String,
name: String,
street: { type: String, required: true }
}
});
答案 3 :(得分:0)
要保存地址架构,您需要在函数中执行以下操作以保存订单: 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);
};
请注意这是使用node,express
的示例