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

11

我需要执行什么确切的代码,在bash中将文档插入到mongodb中。目前,我可以通过bash脚本查看mongodb中的文档,但是插入操作无法正常工作。

3个回答

32

你可以从一个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);'

1
只是提供给任何发现这个问题的人一个提示:如果你尝试在 script.js 中使用 console.log(),你会得到一个错误,说它未定义。相应的,在Mongo脚本中,等效的方法是 print()。而 printjson() 也很有帮助。 - Kip

4
如果您不想从文件中提供脚本(我尽可能不使用外部文件作为来源),或者不想使用--eval选项,因为如果有多个条目,很难阅读,那么您可以使用bashheredoc

您可以在终端中输入:

-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$ 

如果您想将其保留在脚本中,只需删除实际上是多行命令提示符的>

对于脚本内部使用,应该按以下方式:

#!/usr/bin/env bash

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

1

将一些JSON插入到Mongo DB中的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}


1
在我看来,这个答案更接近最佳解决方案。它使用了标准输入和管道,使其可以以一种函数式的方式使用。 - Eduardo Montoya

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接