MongoDB 来自 bash 语法错误意外标记:

MongoDB from bash Syntax Error Unexpected Token :

我正在尝试从 bash shell 启动搜索。

root@mongo01:~# mongo mydb --quiet --shell --eval "printjson(db.userContests.find({linkId: {$ne: null}}, {linkId: 1}).pretty())"
type "help" for help
2015-02-23T14:45:09.256+0100 SyntaxError: Unexpected token :

如您所见,我遇到了一个错误。

但是,从 mongo shell 启动相同的程序。

root@axn-mongo01:~# mongo mydb
MongoDB shell version: 2.6.7
connecting to: mydb
> db.userContests.find({linkId: {$ne: null}}, {linkId: 1}).pretty()
{
    "linkId" : "_guid_F5BDEJFk2hvxyamKIVePEw==",
    "_id" : ObjectId("546dc5e47d479b1d0d8b45aa")
}
{
    "linkId" : "_guid_F5BDEJFk2hvxyamKIVePEw==",
    "_id" : ObjectId("546debdf7d479b686f8b458d")
}
{
    "linkId" : "_guid_EcWY0_RmDs8wA2T9LuVAGtiDfUHf8i-jLxTrhDXjzo8=",
    "_id" : ObjectId("546df6237d479b62698b45be")

有人知道发生了什么事吗?谢谢

美元符号 $ 正在被您的 shell 插入,您可以使用 echo 查看发生了什么:

echo mongo mydb --quiet --shell --eval "printjson(db.userContests.find({linkId: {$ne: null}}, {linkId: 1}).pretty())"
mongo mydb --quiet --shell --eval printjson(db.userContests.find({linkId: {: null}}, {linkId: 1}).pretty())

如您所见,您的 shell 正在解析 $ne,这是未设置的,因此生成无效语法。

要修复它,请改用单引号:

mongo mydb --quiet --shell --eval 'printjson(db.userContests.find({linkId: {$ne: null}}, {linkId: 1}).pretty())'