mongodb - MongoDB - MongoImport of JSON (jsonl) - 重命名、更改类型和添加字段
问题描述
我是 MongoDB 主题的新手,将一个大(16GB)文件(jsonl)导入我的 MongoDB(简单 PSA-Cluster)时遇到 4 个不同的问题。
在下面的附件中,您将找到来自提到的 JSON-Dump 的示例条目。使用我从外部提供商那里获得的这个文件,我实际上有 4 个问题。
- “hotel_id”是关键,通常应该(重新)命名为“_id”
- “hotel_id”不应被视为字符串而不是数字
- “位置”的格式不正确(如果我正确理解 MongoDB 手册)为 GeoJSON,因为它应该像
"location": {
"type": "Point",
"coordinates": [-93.26838,37.15845]
}
代替
"location": {
"coordinates": {
"latitude": 37.15845,
"longitude": -93.26838
}
}
- “日期”可以用来有效地更新需要更新的记录吗?
所以我现在面临的挑战是在导入数据之前或在导入时根据我的需要转换数据,但在这两种情况下当然要尽可能快。
因此,我搜索了很多提示和最佳实践,但我还没有找到解决方案,可能是因为我是 MongoDB 的初学者。
我玩弄了“jq”来调整数据,例如添加位置似乎需要的类型(第 3 点),但并没有真正成功。
cat dump.jsonl | ./bin/jq --arg typeOfField Point '.location + {type: $typeOfField}'
除此之外,我正在注入大约 500MB 的样本转储,第一次导入时需要 1.5 分钟(空数据库)。如果我在“upsert”模式下运行它,大约需要 12 个小时。所以我也想知道导入这么大的 JSON 转储的最佳做法是什么?
任何帮助表示赞赏!:-)
亲切的问候,Lumpy
{
"hotel_id": "12345",
"name": "Test Hotel",
"address": {
"line_1": "123 Test St",
"line_2": "Apt A",
"city": "Test City",
},
"ratings": {
"property": {
"rating": "3.5",
"type": "Star"
},
"guest": {
"count": 48382,
"average": "3.1"
}
},
"location": {
"coordinates": {
"latitude": 22.54845,
"longitude": -90.11838
}
},
"phone": "555-0153",
"fax": "555-7249",
"category": {
"id": 1,
"name": "Hotel"
},
"rank": 42,
"dates": {
"added": "1998-07-19T05:00:00.000Z",
"updated": "2018-03-22T07:23:14.000Z"
},
"statistics": {
"11": {
"id": 11,
"name": "Total number of rooms - 220",
"value": "220"
},
"12": {
"id": 12,
"name": "Number of floors - 7",
"value": "7"
}
},
"chain": {
"id": -2,
"name": "Test Hotels"
},
"brand": {
"id": 2,
"name": "Test Brand"
}
}
解决方案
推荐阅读
- python - 避免在更新参数中没有 .caption(或 user.id 或.....)时收到错误(“NoneType”类型的参数不可迭代)
- c - fscanf() 如何处理双精度值?
- javascript - JavaScript:从文件阅读器中提取 base64 字符串
- ios - 减少文本字段中左视图和光标之间的差距
- amazon-web-services - AWS Cognito 角色限制调用 Lambda 的权限
- javascript - 在移动设备上将按空格键更改为屏幕按钮
- sas - 如何读取流内数据
- css - 我应该在哪里放置 OctoberCMS 的图像文件
- pointers - 无法附加到函数内的切片
- html - 如何使用css在圆形按钮内居中div