尝试使用对象进行相当简单的创建:

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

10-06 15:41
查看更多