【问题标题】:Accessing object in array of arrays using mongoose使用猫鼬访问数组数组中的对象
【发布时间】:2017-06-13 14:39:11
【问题描述】:

我有以下结构,并且正在尝试删除参与者 (league.division.participants) 中的一个对象。

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)。关于我应该做什么的任何指示?

【问题讨论】:

标签: node.js mongodb mongoose


【解决方案1】:

您可以使用$pull 根据条件删除数组元素:

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

【讨论】:

  • 完美。谢谢。跟进问题。当我输入您的解决方案时,我不小心在 pull 中使用了“division”而不是“divisions”,但 mongoose 没有返回错误。知道为什么吗?
  • 如果没有与您的查询匹配,则不会发送错误(为什么会这样?),但在结果中,修改结果的数量res.nModified 将为 0
  • 仍然有关系数据库的心态,所以当他没有找到它时,我预计会出错。再次感谢
猜你喜欢
  • 2015-12-28
  • 2021-05-06
  • 2021-05-13
  • 2019-08-21
  • 2021-01-30
  • 1970-01-01
  • 2021-11-17
  • 2014-11-25
  • 2019-10-30
相关资源
最近更新 更多