说我有一个看起来有点像这样的文件。
{
_id: ObjectId,
name: 'corvid',
games: [{
name: 'world-of-warcraft',
lastLogin: ISODate
}, {
name: 'starcraft',
lastLogin: ISODate
}, {
name: 'overwatch',
lastLogin: ISODate
}],
roles: {
'world-of-warcraft': ['player', 'pvp'],
'starcraft': ['player', 'competitive'],
'overwatch': ['player']
}
}
我试图发现此用户中的每个游戏都没有在1周内登录并将其标记为无效。以下是我的基本操作。
Users.update({
$or: Groups.find().map(group => ({
[`roles.${group.name}`]: 'player',
'games': {
$elemMatch: {
name: group.name,
lastLogin: {
$lt: moment().subtract(1, 'week').toDate()
}
}
}
}))
}, {
$set: { 'games.$.status': 'inactive' }
}, {
multi: true
});
但是,当它更新时,它只会更新数组中的单个匹配。我只是希望它为数组中的每个条目执行此操作。
有办法做到这一点吗?