使用mongoimport导入CSV至MongoAtlas时遭遇“Unsupported OP_Query”错误求助
看起来你遇到的这个错误是典型的工具版本与Atlas集群版本不兼容问题,我来给你捋捋解决思路:
首先,这个错误的核心原因是你本地使用的mongoimport版本太老了——旧版本的工具会用已经被MongoDB新版集群废弃的OP_QUERY协议来执行插入操作,而Atlas的集群现在都用的是较新的MongoDB版本,自然就不支持这个旧协议了。
给你几个具体的解决步骤:
先检查版本匹配度
先运行这个命令看看你本地mongoimport的版本:mongoimport --version然后去Atlas控制台的集群详情页,看看你的集群用的MongoDB版本。如果本地版本比集群版本差了2个大版本以上(比如集群是6.0,你本地是4.0),那基本就是版本兼容问题了。
升级本地MongoDB工具包
这是最根本的解决办法:- 如果是直接下载的官方安装包,去MongoDB官网下载对应系统的最新工具包,替换掉你本地旧的
mongoimport即可; - 如果是用包管理器安装的(比如Mac用brew,Linux用apt/yum),直接执行更新命令就行,比如brew的话:
注意尽量让工具版本和Atlas集群的大版本保持一致(比如集群是6.0,工具用6.x版本就好,不用完全一模一样)。brew upgrade mongodb-community
- 如果是直接下载的官方安装包,去MongoDB官网下载对应系统的最新工具包,替换掉你本地旧的
临时 workaround:强制直连模式
如果你暂时不想升级工具,可以试试在你的连接URI末尾加上&connect=direct参数,强制工具使用直连模式,有时候能绕过这个协议兼容问题,修改后的命令大概是这样:mongoimport --uri "mongodb+srv://[user]:[password]@testing-database.nz31d.mongodb.net/myFirstDatabase?retryWrites=true&w=majority&connect=direct" --collection downloads --type csv --file lead-magnets.csv --headerline不过这只是临时方案,长远来看还是升级工具更稳妥。
额外排查点:密码的URL编码
还要确认你的密码里有没有特殊字符(比如@、&、$这些),如果有的话必须做URL编码替换,比如@换成%40,&换成%26,不然会导致URI解析错误,也可能引发奇怪的报错。比如密码是myPass@123,要写成myPass%40123。
另外,也可以顺便检查下:CSV文件的路径是不是正确的,或者用绝对路径试试;还有Atlas集群的IP白名单有没有添加你的本地IP(不过这个错误一般和白名单无关,但排查下也没坏处)。
备注:内容来源于stack exchange,提问作者Andrew Buccellato

