2017-01-27 4 views
1

以下の構造を持ち、参加者(league.division.participants)のオブジェクトを削除しようとしています。mongooseを使って配列の配列にあるオブジェクトにアクセスする

var participantSchema = new mongoose.Schema({ 
player: { type: mongoose.Schema.Types.ObjectId, ref: 'Player' }, 
record: { type: mongoose.Schema.Types.ObjectId, ref: 'ParticipantRecord' }, 
events: [ { type: mongoose.Schema.Types.ObjectId, ref: 'Event' } ] 
}); 

var divisionSchema = new mongoose.Schema({ 
    name: String, 
    participants: [ participantSchema ] 
}); 

var leagueSchema = new mongoose.Schema({ 
    name: String, 
    startDate: { type: Date, default: Date.now }, 
    endDate: Date, 
    locked: Boolean, 
    leagueType: { type: mongoose.Schema.Types.ObjectId, ref: 'LeagueType' }, 
    game: { type: mongoose.Schema.Types.ObjectId, ref: 'Game' }, 
    divisions: [ divisionSchema ], 
}); 

mongoose.model('League', leagueSchema); 



var _RemoveDivisionParticipant = function(participantId) 
{ 
    return new Promise((resolve,reject) =>{ 
     Models.League.findOne({'divisions.participants._id':participantId}) 
      .populate('divisions') 
      .populate('divisions.participants') 
      .exec((err, league) => { 
       if (err) {return reject(err)} 
       league.divisions(XXXXX).participants(participantId).remove(); 
       console.log(league.divisions[0].participants[0]) 
      }) 
    }) 
} 

これは私がこれまで持っているものですが、明らかにそれはリーグオブジェクトを返し、私は参加者が(中XXXXX中で示された区分がわからないので、私は参加者に取得する方法がありません標本、見本)。私が何をすべきかについてのあらゆる指針?

+0

http://stackoverflow.com/questions/30714938/lodash-property-search-in-array-and-in-入れ子の子配列 これは助けることができる –

+0

この関連するポストの答えを読む - http://stackoverflow.com/questions/14763721/mongoose-delete-array-element-in-document-and-save – SylonZero

答えて

1

あなたは条件に基づいて配列要素を削除するために$pullを使用することができます。

League.update({ 
    'divisions.participants._id': participantId 
}, { 
    $pull: { 
     'divisions.$.participants': { 
      "_id": participantId 
     } 
    } 
}, { multi: true }, function(err, res) { 
    console.log(res); 
}); 
+0

パーフェクト。ありがとう。フォローアップの質問。私があなたの解決策をタイプアップしたとき、私は誤ってプルで「部門」の代わりに「部門」を使用しましたが、マングースはエラーを返さなかった。どんな考え? –

+0

クエリに一致するものがない場合(なぜそうなのですか?)、結果には変更された結果の数がres.nModifiedになります0 –

+0

まだリレーショナルDBの考え方があるので、彼はそれを見つけられなかった。再度、感謝します –

関連する問題