mongo --shell file.js和"use"语句

Vit*_*Vad 5 mongodb sublimetext2 sublimetext3

无法找到简单问题的解决方案:

我有文件text.js

use somedb
db.somecollection.findOne()
Run Code Online (Sandbox Code Playgroud)

当我使用文件中的重定向命令在cmd中运行此文件时: "mongo <text.js"

运作正常

但是,当我尝试这种方式

"mongo text.js"或"mongo --shell test.js"

我收到此错误消息

MongoDB shell版本:2.2.0连接到:测试类型"help"for help Wed Dec 05 16:05:21 SyntaxError:missing; before语句pathToFile\test.js.js:1无法加载: pathToFile\test.js.js

它在"使用somedb"时失败了.如果我删除这一行,它运行没有错误,但控制台是明确的.

有什么想法,这是什么以及如何解决?

我想为此找到sollution,为Sublime Text 2创建构建工具.默认构建文件是

{
"cmd": ["mongo","$file"]
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我得到上面的错误

PS.发布此问题后,我找到了SublimeText2的sollution:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo < ${file}"]
}
Run Code Online (Sandbox Code Playgroud)

PSS.发布此问题后,我发现SublimeText3的sollution:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo","<", "$file"]
}
Run Code Online (Sandbox Code Playgroud)

这个构建工具正常工作

Asy*_*sky 9

use dbname 是交互式shell中的辅助函数,当您使用mongo shell和JS脚本文件时,它不起作用.

有多种解决方案.最好的一个,IMO是明确地将DB名称以及主机和端口名称传递给mongo,如下所示:

mongo hostname:27017/dbname mongoscript.js //用您的端口号替换27017

更好的方法是在脚本开头定义数据库:

mydb=db.getSiblingDB("yourdbname");
mydb.collection.findOne();
etc.
Run Code Online (Sandbox Code Playgroud)

后者是首选,因为它允许您在相同的脚本中与多个DB进行交互(如果需要).


Ste*_*ski 2

您可以在启动 mongo 客户端时指定数据库:

mongo somedb text.js
Run Code Online (Sandbox Code Playgroud)

要将客户端的输出获取到 stdout,只需在脚本中使用 printjson 函数:

printjson(db.somecollection.findOne());
Run Code Online (Sandbox Code Playgroud)