2014-06-05 87 views
2

我困惑的是,爲什麼貓鼬是不是救了我的對象:貓鼬不節能嵌套對象

var objectToSave = new ModelToSave({ 
    _id : req.params.id, 
    Item : customObject.Item //doesn't save with customObject.getItem() neither 
}); 

不過是節約這一點;如低於或與硬編碼值:

var objectToSave = new ModelToSave({ 
    _id : req.params.id, 
    Item : { 
    SubItem : { 
     property1 : customObject.Item.SubItem.property1, //also saves with customObject.getItem().SubItem.getProperty1() 
     property2 : customObject.Item.SubItem.property2 
    } 
    } 
}); 

的getter/setter方法是

MyClass.prototype.getItem = function(){ ... }; 

我的項目目標是比較大的,我寧願沒有指定每一單個子屬性...

當我用console.log(customObject.Item)查看我的Item對象時,或者當我通過API將它作爲JSON返回時,它具有我期待的所有嵌套屬性(SubItem,...)。

項目被定義爲:

SubItem = require('SubItemClass.js'); 

function MyClass(){ 
    this.Item = { 
    SubItem : new SubItem() 
    } 
} 

與子作品或定義爲

function SubItem(){ 
    this.property1 = ''; 
    this.property2 = 0; 
} 

的模式似乎按預期方式工作,因爲如果我硬編碼的數據,如果我指定的每一個屬性來保存到型號,我可以將數據保存到型號...

無論如何,這裏是代碼:

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var subItemDefinition = { 
    Property1 : {type:String}, 
    Property2 : {type:Number},  
}; 

var itemDefinition = { 
    SubItem : subItemDefinition 
}; 

var customDefinition = { 
    Item : itemDefinition 
}; 

var customSchema = new Schema(customDefinition); 
module.exports = mongoose.model('ModelToSave', customSchema); 

感謝您的幫助

+0

你是如何定義的'ModelToSave'的模式。它看起來像來自這裏的類型不匹配。你可以編輯你的問題,包括這個請。 –

+0

它看起來像是無法訪問customObject.Item,因此我必須將其分解爲所有子屬性的原因... 當我從POST中保存數據時,我使用與上面相同的代碼結構,即只定義要保存的模型對象以及其更高級別的屬性,如「Item:req.body.Item」 – user1144446

回答

3

我遇到了這個令人沮喪的情況,是一個有點意外的從貓鼬的網站上記錄的解決方案。

所以這是什麼意思是保存(在你的情況下項目)嵌套數組/對象的屬性,你需要明確在指定的變化.markModified('Item')

var objectToSave = new ModelToSave({ 
    _id : req.params.id, 
    Item : customObject 
}); 
objectToSave.markModified('Item'); 
objectToSave.save(); 

既然是無模式的類型,您可以將該值更改爲您喜歡的任何其他值,但Mongoose失去了自動檢測並保存這些更改的功能。要「告訴」Mongoose混合類型的值已更改,請調用文檔的.markModified(path)方法,將路徑傳遞給剛更改的混合類型。

- http://mongoosejs.com/docs/schematypes.html#mixed