2012-05-10 8 views
1

埋め込みドキュメントがそれぞれのコレクションに保存されていないようです。埋め込みドキュメントがコレクションに保存されていません

var County = new Schema({ 
_id     : Schema.ObjectId, 
name    : String, 
biggestCity   : String 
}); 

var Country = new Schema({ 
_id     : Schema.ObjectId, 
name    : String, 
counties    : {type: [County], ref: "County"} 
}); 

var Continent = new Schema({ 
_id  : Schema.ObjectId, 
countries : {type: [Country], ref: "Country"}, 
}); 

...と、ここで私はMongoDBのにそれらを保存するために使用するコードは次のとおりです:ここに私のモデルだ

var continentModel = mongoose.model("Continent"); 
var continent = new continentModel(); 

country.name = name; 

var countryModel = mongoose.model("Country"); 
var countyModel = mongoose.model("County"); 
for (var i = 0; i < req.body.countries.length; i++) { 
    var country = new countryModel(); 
    country.name = req.body.countries[i].name; 

    for (var j = 0; j < req.body.countries[i].counties.length; j++) { 
     var county = new countyModel(); 
     county.name = req.body.countries[i].counties[j].name; 
     county.biggestCity = req.body.countries[i].counties[j].biggestCity; 
     countries.counties.push(county); 
    } 
    continent.countries.push(country; 
} 
continent.save(); 

私は()db.continents.findを行う場合は、文書が戻ってきますすべてのプロパティ(国と郡を含む)にデータが格納されます。

しかし、db.counties.find()またはdb.countries.find()を実行すると、何も戻ってこない。だから、郡と国の文書がそれぞれのコレクションにDBに保存されているのではなく、(埋め込み文書ではなく)代わりに通常のプロパティとしてコンチネンタルコレクションに保存されているようです。

私は間違っていますか?

+0

country.nameはcontinent.nameを読みます。 – tremolo

+0

db.continent.find()の出力を投稿できますか?答えを助けるでしょう –

答えて

1

これは単純すぎるかもしれませんが、forループの最後にcontinent.save()を呼び出してcounty.save()またはcountry.save()を呼び出すことはありません。それは単に省略されているのか、それとも問題を解決しているのでしょうか?省略された場合は、出力の掲載についての私の注意を参照してください。

+0

ありがとう、それはトリックでした! – tremolo

関連する問題