シード関数は、traits配列内に重複エントリを作成しています。save()の後にネストされたオブジェクトモデルを持つシードエントリが重複します
var seedGenres =() => {
seedData.genres.forEach((seed) => {
Genre.create({
name: seed.name
}, (err, newGenre) => {
if (err) {
console.log(err)
} else{
console.log("Genre Created")
seed.traits.forEach((trait) => {
Trait.create({
name: trait.name,
upvoteScore: 0,
downvoteScore: 0,
totalVotes: 0
}, (err, newTrait) => {
if (err) {
console.log(err, newTrait)
} else {
newGenre.traits.push(newTrait)
newGenre.save()
console.log(newGenre.traits)
console.log('Trait pushed succesffuly')
}
})
})
}
})
})
}
Genre.model.js
const mongoose = require('mongoose')
var genreSchema = new mongoose.Schema({
name: String,
traits: [
{
type: mongoose.Schema.Types.ObjectId,
ref: "Trait"
}
]
})
module.exports = mongoose.model("Genre", genreSchema)
Trait.model.js
const mongoose = require('mongoose')
var traitSchema = new mongoose.Schema({
name: String,
upvoteScore: Number,
downvoteScore: Number,
totalVotes: Number
})
module.exports = mongoose.model("Trait", traitSchema)
基本的には、それぞれに3つの特性を持つジャンルを配したいと思っています。コンソールのログには正しいと思われます。それが動作して完了だ後にコレクションを表示するときただし、6つの形質エントリは、各ジャンルの下にあります(二重の私たちが期待している)
これは、我々が
{ 「_id」を期待しているものです:のObjectId( "59ad8a73fa7058a4dc9c4971")、 "名前": "RPG"、 "形質":[ のObjectId( "59ad8a73fa7058a4dc9c4974")、 のObjectId( "59ad8a73fa7058a4dc9c4975")、 のObjectId( "59ad8a73fa7058a4dc9c4973") ]、 "__v" :3 }
これは現在取得中の出力です。
{ "_id":のObjectId( "59ad8a73fa7058a4dc9c4971")、 "名前": "RPG"、 "形質":[ のObjectId( "59ad8a73fa7058a4dc9c4974")、 のObjectId( "59ad8a73fa7058a4dc9c4974")、 のObjectId ( "59ad8a73fa7058a4dc9c4975")、 のObjectId( "59ad8a73fa7058a4dc9c4974")、 のObjectId( "59ad8a73fa7058a4dc9c4975")、 のObjectId( "59ad8a73fa7058a4dc9c4973") ]、 "__v":3 }
ねえ、返事に感謝 - 私は実際に 'addToSet'を使用して' push'を変更していたし、それがdupesのために働くように見えました。今では、すべてのユーザー(ゲーム、ジャンル、特性)を播種するときに、ジャンルの1つに3つの特性のうち2つしか得られません...私は同期vs.非同期のループに関するあなたの提案を掘り下げます - ありがとう! –