2012-10-01 126 views
7

我有一個貓鼬對象模式,它類似於以下保存一個數組屬性:在貓鼬架構

var postSchema = new Schema({ 
    imagePost: { 
    images: [{ 
     url: String, 
     text: String 
    }] 
}); 

我試圖用建立一個新的職位如下:

var new_post = new Post(); 
new_post.images = []; 
for (var i in req.body.post_content.images) { 
    var image = req.body.post_content.images[i]; 
    var imageObj = { url: image['url'], text: image['text'] }; 
    new_post.images.push(imageObj); 
} 
new_post.save(); 

但是,一旦我保存帖子,就會爲images屬性創建一個空數組。我究竟做錯了什麼?

回答

6

你錯過了您的架構的imagePost對象的新對象。試試這個:

var new_post = new Post(); 
new_post.imagePost = { images: [] }; 
for (var i in req.body.post_content.images) { 
    var image = req.body.post_content.images[i]; 
    var imageObj = { url: image['url'], text: image['text'] }; 
    new_post.imagePost.images.push(imageObj); 
} 
new_post.save(); 
2

我剛剛做了類似的事情,在我的情況下追加到現有的集合,請參閱此問題/答案。它可以幫助你:

Mongoose/MongoDB - Simple example of appending to a document object array, with a pre-defined schema

你的問題是,貓鼬,你不能嵌套的對象,只有嵌套模式。所以,你需要做這樣的事情(爲你所需的結構):

var imageSchema = new Schema({ 
    url: {type:String}, 
    text: {type:String} 
}); 

var imagesSchema = new Schema({ 
    images : [imageSchema] 
}); 

var postSchema = new Schema({ 
    imagePost: [imagesSchema] 
}); 
+3

由於v3不需要爲這些子對象指定模式,因此您可以在父模式中將它們指定爲對象文字。 – UpTheCreek