2016-02-27 42 views
0

我是新來的mongo和貓鼬。我需要從這個對象創建貓鼬模式並插入文檔

trailers: [ 
{ 
id: 310131, 
results: [ 
{ 
id: "564b9086c3a3686026004542", 
iso_639_1: "en", 
key: "gy_-pupKvxg", 
name: "The Witch Official Trailer 1 2016 HD", 
site: "YouTube", 
size: 1080, 
type: "Trailer" 
}, 
{ 
id: "56aab2b19251417e110008b2", 
iso_639_1: "en", 
key: "feRupW34rUU", 
name: "Trailer 2", 
site: "YouTube", 
size: 1080, 
type: "Trailer" 
} 
] 
} 
], 

這裏創建架構如何,我此刻

// My Schema 

var movieSchema = new mongoose.Schema({ 
    .... 
    ... 
    .. 
    ., 
    trailers : [ 
     { 
      id: Number, 
      results : [ 
       { 
        id: String, 
        iso_639_1: String, 
        key: String, 
        name: String, 
        site: String, 
        size: Number, 
        type: String, 
       } 
      ], 
      _id : false 
     } 
    ], 
    .... 
    .. 
    . 
}); 

var Movie = mongoose.model('Movies', movieSchema); 

// Insert movie into schema and save to database 
movies.forEach(function(m) { 
    var movie = new Movie({ 
     .... 
     ... 
     .. 
     ., 
     trailers : m.trailers ? m.trailers : "", 
     .... 
     ... 
     .. 
     . 
    }); 

    movie.save(function(err) { 
     if(err) console.log('Error on save' + err); 
    }); 
}, this); 

這樣做,但我做錯了任何人都可以當場或者告訴我如何將每部電影進入模式對象。提前致謝。

+0

'_id:false'你在做什麼這樣做? –

+0

它可以防止id在對象上的自動生成...我認爲 – jonjonson

+0

你從哪裏閱讀過這些內容? _id是MongoDB中文檔中總是存在的東西。如果你提供一個,它不會自己創建一個。但是如果你沒有MongoDB爲你創建它。 –

回答

0

mongoose subdoc,請嘗試使用.pushtrailersmovies。這裏是示例代碼。

movies.forEach(function(m) { 
    var movie = new Movie({ 
     .... 
     //trailers : m.trailers ? m.trailers : "", 
     .... 
    }); 

    m.trailers.forEach(function(t){ 
     movie.trailers.push(t); 
    }); 

    movie.save(function(err) { 
     if(err) console.log('Error on save' + err); 
    }); 
}); 
0

據對我來說,這應該是您的架構:

var movieSchema = new mongoose.Schema({ 
trailers: [ 
    .... 
    ........ 
    .... 
    _id: Number, 
    results: [{ 
     iso_639_1: String, 
     key: String, 
     name: String, 
     site: String, 
     size: String, 
     type: String 
     }] 
    ........ 
    .... 
    ] 
}); 

看你的對象,我的建議是: 你應該分配trailers陣列Number_id領域,你當前分配到id字段。並從架構中刪除id字段。

_id字段唯一標識集合中的文檔。因此,您應該使用它而不是您創建的id字段。其次,你應該讓MongoDB爲你的結果數組對象創建一個_id字段。這就是爲什麼我沒有在結果數組對象中包含_id字段的原因。

接下來,創建新文檔,並將其保存在您的收藏,用你的邏輯:

var Movie = mongoose.model('Movies', movieSchema); 
// Insert movie into schema and save to database 
movies.forEach(function(m) { 
var movie = new Movie({ 
    .... 
    ... 
    .. 
    ., 
    (m.trailers) ? trailers = m.trailers : trailers = null, 
    .... 
    ... 
    .. 
    . 
}); 

movie.save(function(err) { 
    if(err) console.log('Error on save' + err); 
}); 
}, this); 

有什麼不對您的邏輯是,你正在嘗試使用三元運算符來檢查是否存在m.trailers如果是,則要將其分配給預告片數組,否則爲空。你所使用的是:

trailers : m.trailers ? m.trailers : "", 

什麼,你應該使用的卻是:

(m.trailers) ? trailers = m.trailers : trailers = null, 

請做檢查,讓我知道,如果它的工作原理。