使用猫鼬访问数组数组中的对象
Posted
技术标签:
【中文标题】使用猫鼬访问数组数组中的对象【英文标题】: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)。关于我应该做什么的任何指示?
【问题讨论】:
***.com/questions/30714938/… 可能会有所帮助 阅读相关帖子中的答案 - ***.com/questions/14763721/… 【参考方案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
仍然有关系数据库的心态,所以当他没有找到它时,我预计会出错。再次感谢以上是关于使用猫鼬访问数组数组中的对象的主要内容,如果未能解决你的问题,请参考以下文章