尝试使用对象进行相当简单的创建:
var toSave = {
person_number: "rjq8900",
person_name: "john smith",
cars: [{
car_id: "fordTaurus1994",
make: "ford",
model: "taurus",
purchased: "31-Aug-15",
price: "1650"
}]
}
进入模式:
var People = new Schema({
person_number: String,
person_name: String,
cars:[{
car_id: String,
make: String,
model: String,
purchased: Date,
price: Number
}]
})
通过:
People.create(toSave, function(e, doc){
console.log(e);
});
我得到:
errors:{
cars:{
[CastError: Cast to Array failed for value "[object Object]" at path "cars"]
}
}
我在这里错过明显地明显的东西吗?
编辑
在我的示例中添加了“ car_id”字段。我的实际架构/文档很大,有些动态创建。我正在尝试尽可能精确,而不会出于披露目的而过于精确。我无法在此处发布实际数据。
最佳答案
根据docs,您应该像这样处理嵌入式文档:
var Cars = new Schema({
car_id: String,
make: String,
model: String,
purchased: Date,
price: Number
});
var People = new Schema({
person_number: String,
person_name: String,
cars:[Cars]
});
mongoose.model('People',People);
这样,您的“个人”文档的
cars
键将成为DocumentArray
的实例。这是一个特殊的子类Array
,可以处理
casting
,并具有特殊的方法来处理嵌入式文件。
然后,您可以像这样添加汽车文档:
// retrieve my model
var Car= mongoose.model('Car');
// create a person
var person = new Person();
// push car
person.cars.push(
{
car_id: "fordTaurus1994",
make: "ford",
model: "taurus",
purchased: "31-Aug-15",
price: "1650"
}
);
person.save(function (err) {
if (!err) console.log('Success!');
});