首页 > 解决方案 > MongoDB - MongoImport of JSON (jsonl) - 重命名、更改类型和添加字段

问题描述

我是 MongoDB 主题的新手,将一个大(16GB)文件(jsonl)导入我的 MongoDB(简单 PSA-Cluster)时遇到 4 个不同的问题。

在下面的附件中,您将找到来自提到的 JSON-Dump 的示例条目。使用我从外部提供商那里获得的这个文件,我实际上有 4 个问题。

  1. “hotel_id”是关键,通常应该重新)命名为“_id”
  2. “hotel_id”不应被视为字符串而不是数字
  3. “位置”格式不正确(如果我正确理解 MongoDB 手册)为 GeoJSON,因为它应该像
"location": {
        "type": "Point",
        "coordinates": [-93.26838,37.15845]
}

代替

"location": {
        "coordinates": {
            "latitude": 37.15845,
            "longitude": -93.26838
        }
    }
  1. “日期”可以用来有效地更新需要更新的记录吗?

所以我现在面临的挑战是在导入数据之前或在导入时根据我的需要转换数据,但在这两种情况下当然要尽可能快。

因此,我搜索了很多提示和最佳实践,但我还没有找到解决方案,可能是因为我是 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"
    }
}

标签: mongodbperformancemongoimport

解决方案


推荐阅读