来自bash的MongoDB语法错误意外令牌:

时间:2015-02-23 13:57:27

标签: mongodb syntax mongodb-query

我试图从这样的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")

有人知道发生了什么?感谢。

2 个答案:

答案 0 :(得分:1)

美元符号$正由您的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())'

答案 1 :(得分:0)

我用过这个并完美地工作: mongo -pSomePassword -u SomeUserName localhost:27017/test <<< 'db.nameofcollection.find({nameofcolumn: {$exists: true}}).pretty()' 感谢您发布此答案 - 对我来说是一个救生员。