PowerShell中使用mongodump --query选项报错:JSON解析及命令行错误
解决mongodump查询参数解析错误问题
命令行环境下的引号、特殊字符解析规则,和MongoDB扩展JSON的格式要求容易冲突,导致你遇到的「解析查询为扩展JSON错误」或「命令行解析错误」,针对不同操作系统环境,给出以下可行方案:
1. Linux/macOS(Bash)环境
方案A:使用ANSI-C引用
利用Bash的$'...'语法包裹查询内容,内部直接使用标准JSON格式即可:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --query $'{ "meta.field": {"$gte": {"$date": "2023-01-01T00:00:00Z" }}}'
方案B:转义双引号
用双引号包裹整个查询,内部双引号用反斜杠转义:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --query "{ \"meta.field\": {\"$gte\": {\"$date\": \"2023-01-01T00:00:00Z\" }}}"
2. Windows CMD环境
CMD中需要将内部双引号替换为两个双引号进行转义:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --query "{ ""meta.field"" : {""$gte"" : {""$date"" : ""2023-01-01T00:00:00Z"" }}}"
3. Windows PowerShell环境
方案A:单引号包裹查询
PowerShell中单引号内部的内容不会被解析,直接用单引号包裹标准JSON:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --query '{ "meta.field": {"$gte": {"$date": "2023-01-01T00:00:00Z" }}}'
方案B:转义特殊字符
若使用双引号包裹,需用反引号()转义内部的$`符号和双引号:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --query "{ `"meta.field`": {`"$gte`": {`"$date`": `"2023-01-01T00:00:00Z`" }}}"
4. 最稳妥方案:使用查询文件
完全避开命令行解析问题,将查询内容保存为JSON文件(比如query.json):
{ "meta.field": {"$gte": {"$date": "2023-01-01T00:00:00Z" }}}
执行mongodump时指定该文件:
mongodump --uri "mongodb+srv://l:p@host/db" -o folder --collection collection --queryFile query.json
内容的提问来源于stack exchange,提问作者MrVoodoo
相关产品推荐
相关产品推荐

