如何减少MongoDB代码的大小



我需要一些帮助来组织这场混乱。。。我一直在想,我是否可以把所有这些都应用到函数中,但我真的不知道该怎么做。

if(args[0] == 'add'){
if(roleType == 'join') add = await roleModel.updateOne({serverID: message.guild.id}, {$addToSet: {joinRoles: role}});
else if(roleType == 'member') add = await roleModel.updateOne({serverID: message.guild.id}, {$addToSet: {memberRoles: role}})
else if(roleType == 'mute') add = await roleModel.updateOne({serverID: message.guild.id}, {$addToSet: {muteRoles: role}})
else return error02 = sendError02(this.usage);
}
else if(args[0] == 'remove'){
if(roleType == 'join') remove = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$pull: {joinRoles: role}});
else if(roleType == 'member') remove = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$pull: {memberRoles: role}});
else if(roleType == 'mute') remove = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$pull: {muteRoles: role}});
else return error02 = sendError02(this.usage);
}
else if(args[0] == 'reset'){
if(!roleType) reset = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$unset: {joinRoles: '', memberRoles: '', muteRoles: ''}});
else if(roleType == 'join') reset = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$unset: {joinRoles: ''}});
else if(roleType == 'member') reset = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$unset: {memberRoles: ''}});
else if(roleType == 'mute') reset = await roleModel.findOneAndUpdate({serverID: message.guild.id}, {$unset: {muteRoles: ''}});
}

例如,您可以执行

var action;
var value = role;
if (args[0] == 'add') {
action= "$addToSet";
} else if (args[0] == 'remove') {
action= "$pull";    
} else if (args[0] == 'reset') {
action= "$unset";
}
var operation = {};
for (let r in ["join", "member" ,"mute"]) {
if(!roleType || r == roleType) operation[r + "Roles"] = value;
}     
var update = {};   
update[action] = operation;
reset = await roleModel.findOneAndUpdate({serverID: message.guild.id}, update);

var operation = {};
for (let r in ["join", "member", "mute"]) {
if (!roleType || r == roleType) operation[r + "Roles"] = role;
// The specified value in the $unset expression (i.e. "") does not impact the operation.
}
if (args[0] == 'add') {
add = await roleModel.updateOne({ serverID: message.guild.id }, { $addToSet: operation });
} else if (args[0] == 'remove') {
remove = await roleModel.findOneAndUpdate({ serverID: message.guild.id }, { $pull: operation });
} else if (args[0] == 'reset') {
reset = await roleModel.findOneAndUpdate({ serverID: message.guild.id }, { $unset: operation });
}

好的,谢谢Wernfried Domscheit,我想好了。我决定尝试第二个代码,但我对";r〃;所以我稍微改变了第一部分。这就是它对我的作用:

let operation = {};
let types = ['join', 'member', 'mute']
for (var i = 0; i < types.length; i++){
if (types[i] == roleType){
operation[roleType + "Roles"] = role;
}

最新更新