Mongoose创build包含对象数组的logging(Cast to Array失败)

尝试什么似乎是一个相当简单的创build使用对象:

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”字段。 我的实际架构/文件很大,有些dynamic创build。 我试图尽可能精确,不要为了披露目的而过于准确。 我不能在这里发布实际的数据。

根据文档 ,你应该像这样处理你的embedded式文档:

 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); 

这样,您的People文档的cars钥匙将成为DocumentArray一个实例。 这是一个特殊的子类Array ,可以处理casting ,并有特殊的方法来处理embedded式文档。

然后你可以添加一个汽车文档,如下所示:

 // 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!'); });