您已经正确地识别了问题:数据的大小超过了可以作为参数/参数/数据传递给any脚本或程序的大小.您所做的是将整个文件的数据加载到一个shell变量中,并在eval中展开.
相反,它可以构建为脚本,因为您被限制仅使用shell命令mongosh
.&脚本.js
文件将被传递到mongosh
using the --file
param.由于文件将被直接读取,并且不需要将内容作为参数传递,因此文件可以根据需要变得大.
my_file.json
与cat my_file.json
的示例内容:
{
"_id": 123,
"first": "Name",
"last": "something"
}
1. Select 要使用的数据库:用途:
echo 'db = db.getSiblingDB("stacko");' > temp.js
- 请注意使用
>
,以便创建新的temp.js
文件,
- 将'stacko'替换为您想要使用的任何DB.
- 由于您在变量中有DB,因此使用带双引号var,并使用单内引号表示:
echo "db = db.getSiblingDB('$databaseName');" > temp.js
2.添加一个insertOne
声明:
echo 'db.test_collection.insertOne(' >> temp.js
- 注意使用double
>>
,以便它附加到temp.js
文件中
- 将"test_collection"替换为集合名称
3.把你的json文件的内容放进temp.js
:
cat my_file.json >> temp.js
4.在后面添加右括号和分号:
echo ');' >> temp.js
5. [可选]用cat temp.js
判断文件:
db = db.getSiblingDB('stacko');
db.test_collection.insertOne(
{
"_id": 123,
"first": "Name",
"last": "something"
}
);
6.执行temp.js
it,使用--file
选项到mongosh
:
mongosh <connection options as above> --file=temp.js
在你的情况下,这将是:
/mongo/path/monhosh $databaseName \
--tlsCertificateKeyFile someAuthDetails \
--tlsCAFile someMoreAuthDetails
--file temp.js
如果你想像这样插入.json
个文件中的许多现有文档,请重复步骤2、3、4,然后最后执行步骤6.或者创建单独的. js脚本来执行mongosh --file some_file.js
.