Я новичок в topi c MongoDB и имею 4 разных проблемы с импортом большого (16 ГБ) файла (jsonl) в мой MongoDB (простой PSA-кластер).
Ниже прикреплен образец записи из упомянутого JSON -Dump. С этим файлом, который я получаю от внешнего провайдера, у меня на самом деле 4 проблемы.
- "hotel_id" - ключ, а должен обычно быть (повторно) названный "_id"
- "hotel_id" должен не рассматриваться как строка , а не как Number
- "местоположение" - неправильно отформатировано (если я правильно понял, Руководство MongoDB) как Geo JSON, как и должно быть
"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}'
Кроме того, я вводил пробный дамп объемом около 500 МБ, который занял 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"
}
}