[英]How can I reduce the size of MongoDB code?
我需要一些幫助來組織這個混亂......如果我可以把所有這些都放到函數中,我正在徘徊,但我真的不知道如何。
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.