我需要在mongo集合中插入一个181KB的json文件,限制是需要使用mongosh来完成.

json_file_path=/some/path/file.json
json_file_string=$(cat $json_file_path)

/mongo/path/monhosh $databaseName \
    --tlsCertificateKeyFile someAuthDetails \
    --tlsCAFile someMoreAuthDetails
    --quiet \
    --eval "db.test_collection.insertOne(${json_file_string})" 

这似乎适用于较小的文件,但如果使用181 KB,这并不是很大,它会失败如下:

-ksh: /mongo/path/monhosh: cannot execute [Arguments list too long]

Ive将ulimit—s从8000增加到了65000,这似乎是没有运气的最大值.有什么 idea 吗?

推荐答案

您已经正确地识别了问题:数据的大小超过了可以作为参数/参数/数据传递给any脚本或程序的大小.您所做的是将整个文件的数据加载到一个shell变量中,并在eval中展开.

相反,它可以构建为脚本,因为您被限制仅使用shell命令mongosh.&脚本.js文件将被传递到mongosh using the --file param.由于文件将被直接读取,并且不需要将内容作为参数传递,因此文件可以根据需要变得大.

my_file.jsoncat 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.

Mongodb相关问答推荐

会话的Mongo-go驱动程序版本.Copy()

MongoDB(Mongoose)条件判断没有像我预期的那样工作

MongoDB:如何通过增量向量递增整数向量

Golang中的Mongo中值运算

Mongo 将一个数组链接到另一个数组

MongoDB查询优化

CouchDB 或 MongoDB 中的哪一个适合我的需求?

更新文档中的数组时,如何在 MongoDB 和 C# 中使用 $push 更新修饰符

使用 homebrew 和 Xcode 8.1.1 安装 Mongodb 失败

如何在 mongo JavaScript shell 中中止查询

$elemMatch 的 MongoDB 索引

MongoDB - 我如何找到另一个集合中的文档未引用的所有文档

从 id 删除 PyMongo 中的文档

初创公司应该考虑哪些数据库系统?

单个语句中的多个 mongo 更新运算符?

Lombok - java.lang.StackOverflowError:toString 方法上的 null

将新值推送到 mongodb 内部数组 - mongodb/php

PyMongo 创建具有 2 个或更多字段的唯一索引

在 NodeJs 中处理 Mongodb 全局连接的最佳方法是什么

全局初始化失败:BadValue Invalid or no user locale set.请确保正确设置 LANG 和/或 LC_* 环境变量