MongoDB v4.4在Git Bash v2.31.1(Windows10环境)执行插入命令报语法错误问题求助
Git Bash下MongoDB Shell插入命令报错的解决办法及原因分析
嘿,我之前在Git Bash里折腾MongoDB的时候也碰到过一模一样的问题,太懂这种困惑了!咱们先把问题解决了,再唠唠为啥会这样~
解决方法
试试下面这几种办法,随便哪种都能搞定:
把双引号换成单引号:把命令里包裹字符串的双引号改成单引号,比如执行这个:
db.database.insertOne( { property: 'exampletext' } )Git Bash对单引号的处理更“老实”,不会乱解析里面的内容,直接原封不动传给MongoDB Shell。
转义双引号:如果就想用双引号,给每个内部的双引号前面加个反斜杠转义:
db.database.insertOne( { property: \"exampletext\" } )这样Git Bash就知道这些双引号是MongoDB命令的一部分,不是shell的字符串边界了。
用
--eval参数执行命令:直接在Git Bash里用mongo --eval把整个命令包起来,比如:mongo --eval 'db.database.insertOne( { property: "exampletext" } )'这种方式相当于直接把命令传给MongoDB Shell执行,跳过Git Bash的中间解析。
问题原因
其实核心就是Git Bash和Windows原生终端的命令解析逻辑不一样:
Git Bash是基于MinGW的类Unix shell环境,它会先对你输入的命令做一层解析——比如把双引号当成自己的字符串边界来处理,这就导致你输入的MongoDB命令还没传到Shell里,就被Git Bash改得面目全非了,自然会出现“非法字符”的错误。
而C:\programfiles\mongodb\server\4.4\bin\mongo.exe打开的原生终端是Windows的命令行环境,它不会做这种类Unix风格的引号解析,输入的命令会原封不动交给MongoDB Shell执行,所以就没问题啦。
内容的提问来源于stack exchange,提问作者Vileto Medoze
相关产品推荐
相关产品推荐

