2015-11-13 23 views
1

嘗試什麼似乎像一個相當簡單的創建使用對象:貓鼬創建包含對象數組記錄(投射到陣列失敗)

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」字段。我的實際架構/文檔很大,並且有些動態創建。我試圖儘可能精確,而不是爲了披露目的而過於準確。我無法在此發佈實際數據。

+0

@inspired沒想好。我試了一下,並確認日期對象正確傳遞。不幸的是,我仍然遇到同樣的錯誤。 –

回答

1

根據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!'); 
}); 
+0

不得不修改大量的東西(我的半動態模式讀取器依賴於'schema.tree'的一些東西),但是這個工作非常好!謝謝,我已經在這個幾個小時了。 –