无法连接本地MongoDB:mongosh报错但Compass可正常连接
问题背景
Mac系统下,通过mongod --dbpath=/Users/username/data/db启动MongoDB,MongoDB Compass可正常连接本地数据库,但使用brew安装的mongosh加载脚本(脚本内通过db = connect("mongodb://localhost:27017/?readPreference=primary&ssl=false&directConnection=true")连接)时,出现错误:MongoNetworkError: connect ECONNREFUSED ::1:27017。已尝试删除/tmp/mongodb-27017.sock、重启VSCode、重启电脑后重新启动mongod,问题仍存在。
问题原因
Mac系统中localhost默认同时映射到IPv4的127.0.0.1和IPv6的::1。你的mongod实例可能仅监听了IPv4地址,而mongosh或脚本中的连接请求优先使用了IPv6的::1,导致连接被拒绝;而MongoDB Compass可能默认使用IPv4的127.0.0.1连接,因此不受影响。
解决方案
方案1:修改脚本连接字符串
将脚本中的localhost替换为127.0.0.1,强制使用IPv4连接:
db = connect("mongodb://127.0.0.1:27017/?readPreference=primary&ssl=false&directConnection=true")
方案2:调整mongod启动参数
启动mongod时添加--bind_ip_all参数,让实例监听所有可用IP地址(包括IPv4和IPv6):
mongod --dbpath=/Users/username/data/db --bind_ip_all
方案3:验证mongod监听状态(可选)
运行以下命令查看mongod的监听地址,确认是否包含IPv6的::1:
lsof -i :27017
如果输出中只有127.0.0.1:27017,说明未监听IPv6,此时使用方案1或2即可解决问题。
内容的提问来源于stack exchange,提问作者iPhoneJavaDev

