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]) 
      }) 
    }) 
} 

Это то, что я до сих пор, но, очевидно, он возвращает объект лиги, и я не имею возможности попасть к участникам, так как я не знаю, какое подразделение участник в (показано ХХХХХ в образец). Любые указания относительно того, что я должен делать?

+0

http://stackoverflow.com/questions/30714938/lodash-property-search-in-array-and-in- nested-child-arrays Возможно, это может помочь –

+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

Perfect , Благодарю. Последующий вопрос. Когда я набрал ваше решение, я случайно использовал «деление» вместо «делений» в тяге, но мангуста не возвращал ошибку. Любая идея почему? –

+0

Ошибка отправлена, если ничего не соответствует вашему запросу (почему бы это быть?), Но в результате число измененных результатов 'res.nModified' будет 0 –

+0

Все еще имеют отношение к реляционным БД, поэтому я ожидал ошибку, когда он этого не нашел. еще раз спасибо –