You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java向MongoDB现有数组添加字符串(Minecraft插件故障修复)

问题根因

你当前代码不生效的核心问题是getPermissions()方法返回的是全新生成的临时List对象,并非Profile类内部存储自定义权限的this.permissions成员本身。你往这个临时汇总列表中添加元素,不会修改对象本身持有的权限数组,执行save操作时自然不会把新权限写入MongoDB。

getPermissions()方法的设计初衷是将用户自定义权限、身份组权限、继承权限合并后返回汇总的完整权限列表,本身就不支持直接修改源数据。

修复步骤
  1. 首先在Profile类中新增一个专门用来添加自定义权限的方法:
// 添加到Profile类中
public void addCustomPermission(String permission) {
    String lowerPermission = permission.toLowerCase();
    // 先判重避免重复存储相同权限
    if (!this.permissions.contains(lowerPermission)) {
        this.permissions.add(lowerPermission);
    }
}
  1. 修改命令执行逻辑,替换原来的错误添加方式:
@Command(names = {"profile addpermission"}, permission = "atmosphere.profile.admin")
public static void profileAddPermission(CommandSender sender, @Param(name = "target") Profile target, @Param(name = "permission") String permission){
    String lowerPerm = permission.toLowerCase();
    if(target.hasPermissionPriorToLogin(lowerPerm)){
        sender.sendMessage(BukkitChat.format("&c目标用户已经拥有该权限。"));
        return;
    }
    // 替换原来的target.getPermissions().add逻辑
    target.addCustomPermission(lowerPerm);
    target.save();
    sender.sendMessage(BukkitChat.format("&a已成功将权限 &r" + lowerPerm + "&r &a添加到用户 &r" + target.getDisplayName() + "&r&a 的配置中。"));
}

修改完成后重新编译插件运行即可,新添加的权限会直接写入Profile类的permissions成员,save时会同步到MongoDB的对应数组字段中。

内容的提问来源于stack exchange,提问作者Jack Stanford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:00:04