【问题标题】:Basics of MongoDB Scripts - How toMongoDB 脚本基础 - 如何
【发布时间】:2010-08-29 15:08:56
【问题描述】:

MongoDB 脚本的基础是什么?

我认为脚本将以.js 结尾,我们使用mongo try.js 运行它

但是如果我把

print(db.foo.find())

try.js 并使用mongo try.js

它会说

MongoDB shell version: 1.6.1
connecting to: test
DBQuery: test.foo -> undefined

如果我通过输入mongo 来使用交互式外壳,然后输入

> db.foo.find()
{ "_id" : ObjectId("4c7a73428261000000003a7e"), "a" : 1 }
> print(db.foo.find())
DBQuery: test.foo -> undefined

{a : 1} 是我之前使用 db.foo.insert({a:1}) 插入的东西

执行 MongoDB 脚本的正确方法是什么,以及如何像 Ruby irb 或 Python 的 IDLE 那样打印出来?谢谢。 (Ruby的puts a.inspectp a通常都可以打印出a的整个结构(a中的所有变量名和值))

alert(db.foo.find())console.log(db.foo.find()) 也不起作用。

【问题讨论】:

  • 我发现如果不在 shell 中,我可以使用 printjson({hm:'yeah'})db.foo.find().forEach(printjson) 打印出来
  • 虽然已经间接说明如下:对我来说重要的一课是将文件管道传输到 MongoDB,例如mongo < script.txt 允许使用 MongoDB-shell 命令,与 mongo script.js 不同

标签: mongodb nosql


【解决方案1】:

外部脚本文件在 shell 上下文之外执行。

db.foo.find() 数据库命令只返回一个游标;它自己不打印任何内容。当从 shell 发出命令时,shell 将迭代游标并打印结果。从外部脚本文件运行命令时,不会打印任何内容。

print() 命令将打印出对象的字符串表示形式。在你的情况下,它是光标:

> print(db.foo.find())
DBQuery: test.foo -> undefined

如果您需要打印查询结果,则必须在脚本文件中迭代光标并打印每个结果,类似于 shell 所做的:

function printResult (r) {
  print(tojson(r))
}

db.foo.find().forEach(printResult)

【讨论】:

    【解决方案2】:

    有一个用于打印 json 对象的内置函数。

    只需将.forEach(printjson) 附加到函数调用的末尾即可。

    db.foo.find().forEach(printjson);
    

    【讨论】:

      【解决方案3】:

      linux 或 mac 外壳:

      user@comp:$ mongo < script.js
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-15
        • 2016-05-27
        相关资源
        最近更新 更多