如何将文档从 bash 脚本插入到 mongodb?

How can I insert a document from a bash script to mongodb?

要使用 bash 将文档插入 mongodb,我需要执行的确切代码是什么。目前我可以通过 bash 脚本查看 mongodb 中的文档,但插入不起作用。

您可以从 javascript 文件中注入 javascript 代码:

mongo  127.0.0.1/MyDatabase script.js

与 script.js:

var document = {
    name  : "document_name",
    title : "document_title"
};

db.MyCollection.insert(document);

或直接:

mongo 127.0.0.1/MyDatabase --eval 'var document = { name : "document_name", title : "document_title" }; db.MyCollection.insert(document);'

如果您不想从文件提供脚本(我尽可能不使用外部文件)或不使用 --eval 选项,如果您有很多条目,这可能会难以阅读,您可以使用 bash heredoc

您可以在终端输入:

-bash-4.1$ mongo mongodb://myServerAddress/myDbName <<EOF
> db.myCollectionName.insert({
> name: "doc name",
> title: "doc title"
> })
> EOF

结果:

MongoDB shell version v3.4.1
connecting to: mongodb://myServerAddress/myDbName
MongoDB server version: 3.0.7
WARNING: shell and server versions do not match
WriteResult({ "nInserted" : 1 })
bye
-bash-4.1$ 

如果您想将它保留在脚本中,只需删除 >,它实际上是提示输入多行命令。

对于in-script使用,应该如下:

#!/usr/bin/env bash

mongo mongodb://myServerAddress/myDbName <<EOF
db.myCollectionName.insert({
    name: "doc name",
    title: "doc title"
})
EOF

将一些 JSON 插入 Mongo 数据库 sample_db,集合 products_coll

echo '{ item: "card", qty: 115 }' | \
 sed 's@^@db.products_coll.insert( @; s@$@ ) @'   | mongo sample_db

MongoDB shell version v3.6.3
connecting to: mongodb://127.0.0.1:27017/sample_db
MongoDB server version: 3.6.3
WriteResult({ "nInserted" : 1 })
bye

确保它在这里

mongoexport -d sample_db -c products_coll

{"_id":{"$oid":"5d27e83152a049227799710e"},"item":"card","qty":115.0}