【问题标题】:mongo --shell file.js and "use" statementmongo --shell file.js 和“使用”语句
【发布时间】:2012-12-05 14:53:59
【问题描述】:

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

我有文件 text.js

use somedb
db.somecollection.findOne()

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

工作正常

但是当我尝试这种方式时

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

我收到此错误消息

MongoDB 外壳版本:2.2.0 连接到:测试 输入“帮助”寻求帮助 12 月 5 日星期三 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"]
}

这个构建工具可以正常工作

【问题讨论】:

  • 我正在寻找解决方案,以便为 Sublime Text 2 创建构建工具。

标签: mongodb sublimetext2 sublimetext3


【解决方案1】:

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

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

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

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

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

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

【讨论】:

  • 是的,请注意,关于 mongo shell 辅助命令与其 JS 等效命令之间的完整映射,可以在您的 js 脚本文件中使用,请参阅 mongo 文档:docs.mongodb.org/manual/tutorial/…
【解决方案2】:

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

mongo somedb text.js

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

printjson(db.somecollection.findOne());

【讨论】:

  • Idea 在 js 文件中指定了 db。我之前看过这个mongo shell的初始化。至于“printjson”thx,但也存在一些问题。当我们运行“printjson(db.somecollection.findOne());”我们得到结果。当我们尝试运行“printjson(db.somecollection.find());”时,它似乎打印了整个光标对象,但不是结果。没有 printjson 它什么都不会返回。
  • 您可以在脚本中的 while 循环中迭代结果并为每个单独的对象调用 printjson:while (cursor.hasNext()) printjson(cursor.next());
【解决方案3】:

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

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

而不是这个:

- name: mongo breaking
  command: /usr/bin/mongo < text.js

【讨论】:

    【解决方案4】:

    这就是最终在 Windows + Sublime Text 2 + MongoDB 2.6.5 上对我有用的方法

    {
        "selector": "source.js",
        "shell":true,
        "cmd": ["mongo","<", "$file"],
        "working_dir" : "C:\\MongoDB\\bin"
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多