簡體   English   中英

如何減小 MongoDB 代碼的大小?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM