5

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

我有文件text.js

use somedb
db.somecollection.findOne()

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

工作正常

但是当我尝试这种方式时

“mongo text.js”或“mongo --shell test.js”

我收到此错误消息

MongoDB shell 版本:2.2.0 连接到:测试类型“帮助”寻求帮助 Wed Dec 05 16:05:21 SyntaxError: missing ; 之前的语句pathToFile \test.js.js:1 加载失败: pathToFile \test.js.js

“使用 somedb”失败了。如果我删除此行,它会正常运行,但控制台很清楚。

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

我正在为此寻找解决方案,为 Sublime Text 2 创建构建工具。默认构建文件是

{
"cmd": ["mongo","$file"]
}

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

PS。发布此问题后,我立即找到了SublimeText2的解决方案:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo < ${file}"]
}

PSS。发布此问题后,我立即找到了SublimeText3的解决方案:

{
"selector": "source.js",
"shell":true,
"cmd": ["mongo","<", "$file"]
}

这个构建工具正常工作

4

4 回答 4

9

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

对此有多种解决方案。最好的一个,IMO 是像这样显式地将数据库名称以及主机和端口名称传递给 mongo:

mongo hostname:27017/dbnamemongoscript.js // 用你的端口号替换 27017

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

mydb=db.getSiblingDB("yourdbname");
mydb.collection.findOne();
etc.

后者更可取,因为它允许您在需要时在同一个脚本中与多个数据库进行交互。

于 2012-12-05T22:39:23.067 回答
2

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

mongo somedb text.js

要从客户端获取输出到标准输出,只需在脚本中使用 printjson 函数:

printjson(db.somecollection.findOne());
于 2012-12-05T15:40:07.963 回答
0

需要从 shell 调用 Mongo 才能获得该模式,使用 Ansible 你会得到这个:

- name: mongo using different databases
  action: shell /usr/bin/mongo < text.js

而不是这个:

- name: mongo breaking
  command: /usr/bin/mongo < text.js
于 2014-01-24T16:19:31.950 回答
0

这就是最终在 Windows + Sublime Text 2 + MongoDB 2.6.5 上为我工作的方法

{
    "selector": "source.js",
    "shell":true,
    "cmd": ["mongo","<", "$file"],
    "working_dir" : "C:\\MongoDB\\bin"
} 
于 2014-12-05T16:24:51.997 回答