【问题标题】:Specify which database to use in mongodb .js script指定在 mongodb .js 脚本中使用哪个数据库
【发布时间】:2011-10-08 20:39:51
【问题描述】:

我只想针对特定的 mongodb 数据库运行 .js 脚本,但似乎无法获得正确的语法。

echo "print(db.address.find().limit(1));" > test.js
mongo test.js

如何选择执行此操作的数据库,我尝试了use foo 的各种组合,但均未成功。

> show dbs                      
admin   (empty)
local   (empty)
foo 0.203125GB
bar 0.203125GB

我想在这种情况下使用foo

【问题讨论】:

    标签: mongodb mongo-shell


    【解决方案1】:

    您可以使用db.getSiblingDB() 方法,如hereMongoDB documentation 中所述。

    // Equivalent for "use <db>" command in mongo shell
    db = db.getSiblingDB('foo')
    

    这在使用 use 助手不可用的 mongo shell 编写脚本时特别有用。或者当您无法在连接字符串上引用数据库时。

    【讨论】:

      【解决方案2】:
      mongo <name of db> --eval "db.runCommand( <js in here> );"
      

      或者,如果您没有特定的 runCommand 脚本,您可以这样做:

      mongo <name of db> --eval "<js in here>;"
      

      如果您使用的是返回值:

      mongo <name of db> --eval "db.eval('return fnName()')"
      

      对于一个文件

      mongo <name of db> some_instructions.js
      

      【讨论】:

      • 如何指定文件?即不在那个命令行函数中放一大块javascript?
      • 请记住,bash 中的双引号会将$(和some other characters)视为特殊字符!因此,您应该使用单引号 ('&lt;js in here&gt;') 或使用反斜杠转义 $ 和其他特殊字符:mongo mydbname --eval "JSON.stringify( db.mycollectionname.find({count: {\$lte:1} }).limit(2).toArray() )" 克里斯,可能值得将您的答案中的引号更改为单引号?
      猜你喜欢
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多