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

MongoDB写入数据触发commandFailureException(错误码40415)求助

问题排查与解决

错误原因分析

这个40415错误(authenticate.nonce未知字段)主要有两个常见诱因:

  • MongoClient构造参数传参错误:你把认证凭证列表错误地传给了ServerAddress的构造方法,导致客户端发起的认证请求格式完全错误,服务器无法识别字段。
  • Java驱动与MongoDB服务器版本不兼容:如果驱动版本和服务器版本差距过大,认证协议的字段定义会不匹配,也会触发这类字段未知的错误。

修正后的代码

先把构造MongoClient的代码改对,正确的参数传递方式是:

public void writeToMongo(BasicDBObject data){
    MongoCredential credential = MongoCredential.createMongoCRCredential(username, dbName, pwd.toCharArray());
    // 正确的构造顺序:ServerAddress在前,凭证列表在后
    MongoClient client = new MongoClient(new ServerAddress(hostIp, port), Arrays.asList(credential));
    database = client.getDB(dbName);
    collection = database.getCollection("nameTable");
    collection.save(data);
    // 注意:用完客户端记得关闭,避免资源泄漏
    client.close();
}

另外注意:createMongoCRCredential的密码参数应该是char[]类型,直接传字符串虽然能编译,但不符合安全规范。

额外检查项

  • 确认Java MongoDB驱动版本和服务器版本匹配:比如MongoDB 4.0+建议用3.8以上的驱动,5.0+建议用4.0以上的驱动,尽量保持大版本一致。
  • 检查MongoDB服务器的认证配置:确认开启的是SCRAM-SHA-1/SHA-256认证(createMongoCRCredential对应的就是这个机制),如果服务器用的是其他认证方式(比如MONGODB-CR),需要改用对应的凭证创建方法。

内容的提问来源于stack exchange,提问作者qt.qt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:15:46