Я пытаюсь вставить документ в mon go db с db.collection.insert_one(d)
.
Документ представляет собой Python словарь, вставленный ниже.
Я получаю ошибку OverflowError: MongoDB can only handle up to 8-byte ints
.
Я предполагаю, что это потому, что там есть int, который слишком велик (вероятно, 9260605851901390000). Я мог бы преобразовать целые числа в строку, но моя проблема в том, что у меня будет много объектов для вставки с различными структурами, и я не смогу узнать, какие поля мне нужно преобразовать в строку.
Есть ли быстрый способ сказать mon go хранить целые числа как строки, если int слишком велико?
В качестве альтернативы, есть ли способ преобразовать все целые числа в строку в глубоко вложенном объекте неизвестной структуры?
d = {'userId': ObjectId('5c3c9525b15acd0f4d9425cf'), 'filename': '1552981263366SyPGpMCPN.jpg', '_raw': {'location': {'city': {'geoname_id': 3170647, 'names': {'de': 'Pisa', 'en': 'Pisa', 'es': 'Pisa', 'fr': 'Pise', 'ja': 'ピサ', 'pt-BR': 'Pisa', 'ru': 'Пиза', 'zh-CN': '比萨'}}, 'continent': {'code': 'EU', 'geoname_id': 6255148, 'names': {'de': 'Europa', 'en': 'Europe', 'es': 'Europa', 'fr': 'Europe', 'ja': 'ヨーロッパ', 'pt-BR': 'Europa', 'ru': 'Европа', 'zh-CN': '欧洲'}}, 'country': {'geoname_id': 3175395, 'is_in_european_union': True, 'iso_code': 'IT', 'names': {'de': 'Italien', 'en': 'Italy', 'es': 'Italia', 'fr': 'Italie', 'ja': 'イタリア共和国', 'pt-BR': 'Itália', 'ru': 'Италия', 'zh-CN': '意大利'}}, 'location': {'accuracy_radius': 100, 'latitude': 43.7085, 'longitude': 10.4036, 'time_zone': 'Europe/Rome'}, 'postal': {'code': '56122'}, 'registered_country': {'geoname_id': 3175395, 'is_in_european_union': True, 'iso_code': 'IT', 'names': {'de': 'Italien', 'en': 'Italy', 'es': 'Italia', 'fr': 'Italie', 'ja': 'イタリア共和国', 'pt-BR': 'Itália', 'ru': 'Италия', 'zh-CN': '意大利'}}, 'subdivisions': [{'geoname_id': 3165361, 'iso_code': '52', 'names': {'de': 'Toskana', 'en': 'Tuscany', 'es': 'Toscana', 'fr': 'Toscane', 'ja': 'トスカーナ州', 'pt-BR': 'Toscana', 'ru': 'Тоскана', 'zh-CN': '托斯卡纳'}}, {'geoname_id': 3170646, 'iso_code': 'PI', 'names': {'en': 'Province of Pisa', 'es': 'Pisa', 'fr': 'Pise'}}]}, 'totalAmount': {'confidenceLevel': 0.9, 'index': 12, 'data': 4, 'text': 'Totaal bruto €4,00', 'regions': [[{'x': 986, 'y': 1013}, {'x': 1199, 'y': 1017}, {'x': 1408, 'y': 1086}, {'x': 1233, 'y': 1083}], [{'x': 1715, 'y': 1026}, {'x': 1779, 'y': 1026}, {'x': 1892, 'y': 1084}, {'x': 1827, 'y': 1084}]], 'currencyCode': 'EUR', 'keyword': 'Totaal bruto €4,00'}, 'taxAmount': {'confidenceLevel': 0}, 'confidenceLevel': 0.8124520547945205, 'date': {'data': '2019-03-16T12:00:00.000Z', 'text': 'BA 112 16/03/19 13:35', 'regions': [[{'x': 994, 'y': 498}, {'x': 1057, 'y': 499}, {'x': 1900, 'y': 569}, {'x': 1835, 'y': 568}]], 'index': 4, 'confidenceLevel': 0.7898630136986302}, 'text': {'text': "NV Parking Parkpoort\nPhilipssite\nBE-3001 Heverlee\nB.T.W. nrBEBE0475136880\nBA 112 16/03/19 13:35\nKwitantie 055051\nKortparkeerkaart\nPP -'Nr. 087031\n16/03/19 09:45\n16/03/19 13:35\nDuur Od3h 51'\n(B.T.W.)\n€ 4,00\nTotaal bruto\n€4,00\nBetaling\nNr: 9260605851901391360\nPOI: 01391360\nTICKET CLIENT\nTerminal:\n01391360\nCommercant:\n28425494\neriode:\n1841\nTransaction:\n00000611\nn MasterCard\n(A0000000041010)\nLE\n018551E7 -\nCarte:\nXXX\nXXXXXXXX25 25\nNumero de sequence carte:\n16/\nPAIEMENT\nDate:\n3/2019 13:33\nCode d'autorisation:\n648838\nWORLDLINE.\nTotal:\n4,00 EUR\nLecture:\nPuce\nCODE OK\nTotaal netto\n€4,00\nAlle bedragen in EUR.\nLeveringsdat. = rek.dat.\nS1E7 - 2/2\n", 'regions': [{'x': 881, 'y': 242}, {'x': 2440, 'y': 242}, {'x': 2440, 'y': 3606}, {'x': 881, 'y': 3606}]}, 'amounts': [{'data': 4, 'index': 11, 'regions': [[{'x': 994, 'y': 910}, {'x': 1011, 'y': 910}, {'x': 1080, 'y': 972}, {'x': 1063, 'y': 972}], [{'x': 1720, 'y': 922}, {'x': 1736, 'y': 922}, {'x': 1889, 'y': 980}, {'x': 1826, 'y': 980}]], 'text': '(B.T.W.) € 4,00', 'currencyCode': 'EUR'}, {'data': 4, 'index': 11, 'regions': [[{'x': 994, 'y': 910}, {'x': 1011, 'y': 910}, {'x': 1080, 'y': 972}, {'x': 1063, 'y': 972}], [{'x': 1720, 'y': 922}, {'x': 1736, 'y': 922}, {'x': 1889, 'y': 980}, {'x': 1826, 'y': 980}]], 'text': '(B.T.W.) € 4,00', 'currencyCode': 'EUR'}, {'data': 4, 'index': 12, 'regions': [[{'x': 986, 'y': 1013}, {'x': 1199, 'y': 1017}, {'x': 1408, 'y': 1086}, {'x': 1233, 'y': 1083}], [{'x': 1715, 'y': 1026}, {'x': 1779, 'y': 1026}, {'x': 1892, 'y': 1084}, {'x': 1827, 'y': 1084}]], 'text': 'Totaal bruto €4,00', 'currencyCode': 'EUR'}, {'data': 4, 'index': 12, 'regions': [[{'x': 986, 'y': 1013}, {'x': 1199, 'y': 1017}, {'x': 1408, 'y': 1086}, {'x': 1233, 'y': 1083}], [{'x': 1715, 'y': 1026}, {'x': 1779, 'y': 1026}, {'x': 1892, 'y': 1084}, {'x': 1827, 'y': 1084}]], 'text': 'Totaal bruto €4,00', 'currencyCode': 'EUR'}, {'data': 4, 'index': 38, 'regions': [[{'x': 1103, 'y': 2654}, {'x': 1119, 'y': 2654}, {'x': 1380, 'y': 2712}, {'x': 1280, 'y': 2712}]], 'text': '4,00 EUR', 'currencyCode': 'EUR'}, {'data': 4, 'index': 38, 'regions': [[{'x': 1103, 'y': 2654}, {'x': 1119, 'y': 2654}, {'x': 1380, 'y': 2712}, {'x': 1280, 'y': 2712}]], 'text': '4,00 EUR', 'currencyCode': 'EUR'}, {'data': 4, 'index': 41, 'regions': [[{'x': 948, 'y': 2857}, {'x': 1168, 'y': 2857}, {'x': 1375, 'y': 2926}, {'x': 1197, 'y': 2926}], [{'x': 1678, 'y': 2873}, {'x': 1749, 'y': 2873}, {'x': 1852, 'y': 2938}, {'x': 1792, 'y': 2938}]], 'text': 'Totaal netto €4,00', 'currencyCode': 'EUR'}, {'data': 4, 'index': 41, 'regions': [[{'x': 948, 'y': 2857}, {'x': 1168, 'y': 2857}, {'x': 1375, 'y': 2926}, {'x': 1197, 'y': 2926}], [{'x': 1678, 'y': 2873}, {'x': 1749, 'y': 2873}, {'x': 1852, 'y': 2938}, {'x': 1792, 'y': 2938}]], 'text': 'Totaal netto €4,00', 'currencyCode': 'EUR'}], 'numbers': [{'data': 1335, 'text': 'BA 112 16/03/19 13 35', 'regions': [[{'x': 994, 'y': 498}, {'x': 1057, 'y': 499}, {'x': 1900, 'y': 569}, {'x': 1835, 'y': 568}]], 'index': 4}, {'data': 45, 'text': '16/03/19 09 45', 'regions': [[{'x': 995, 'y': 755}, {'x': 1049, 'y': 756}, {'x': 1492, 'y': 820}, {'x': 1429, 'y': 819}]], 'index': 8}, {'data': 35, 'text': '16/03/19 13 35', 'regions': [[{'x': 992, 'y': 813}, {'x': 1042, 'y': 814}, {'x': 1485, 'y': 866}, {'x': 1426, 'y': 865}]], 'index': 9}, {'data': 9260605851901390000, 'text': 'Nr 9260605851901391360', 'regions': [[{'x': 970, 'y': 1169}, {'x': 1048, 'y': 1170}, {'x': 1816, 'y': 1246}, {'x': 1125, 'y': 1233}]], 'index': 14}, {'data': 28425494, 'text': '28425494', 'regions': [[{'x': 1119, 'y': 1495}, {'x': 1402, 'y': 1499}, {'x': 1401, 'y': 1545}, {'x': 1118, 'y': 1541}]], 'index': 20}, {'data': 1841, 'text': '1841', 'regions': [[{'x': 1272, 'y': 1599}, {'x': 1408, 'y': 1599}, {'x': 1408, 'y': 1649}, {'x': 1272, 'y': 1649}]], 'index': 22}, {'data': 33, 'text': '3/2019 13 33', 'regions': [[{'x': 962, 'y': 2394}, {'x': 979, 'y': 2394}, {'x': 979, 'y': 2456}, {'x': 962, 'y': 2456}]], 'index': 33}, {'data': 648838, 'text': '648838', 'regions': [[{'x': 1165, 'y': 2507}, {'x': 1382, 'y': 2507}, {'x': 1382, 'y': 2553}, {'x': 1165, 'y': 2553}]], 'index': 35}], 'lineAmounts': [], 'itemsCount': {'data': 0, 'confidenceLevel': 0}, 'entities': {'invoiceNumber': {'data': 'nrBEBE0475136880', 'text': ' nrBEBE0475136880', 'confidenceLevel': 0.5, 'keyword': 'B.T.W. nrBEBE0475136880'}, 'belgiumVATNumbers': [{'data': 'BE0475136880', 'confidenceLevel': 0.5, 'keyword': '', 'text': 'BE0475136880'}]}, 'merchantName': {'data': 'Parking', 'confidenceLevel': 0.43, 'text': 'NV Parking Parkpoort', 'index': 0, 'regions': [[{'x': 1064, 'y': 242}, {'x': 1139, 'y': 243}, {'x': 1798, 'y': 313}, {'x': 1472, 'y': 308}]]}, 'merchantAddress': {'data': 'イタリア, Italia', 'confidenceLevel': 0.43, 'text': 'NV Parking Parkpoort', 'index': 0, 'regions': [[{'x': 1064, 'y': 242}, {'x': 1139, 'y': 243}, {'x': 1798, 'y': 313}, {'x': 1472, 'y': 308}]]}, 'merchantCity': {'confidenceLevel': 0}, 'merchantState': {'confidenceLevel': 0}, 'merchantCountryCode': {'data': 'IT', 'confidenceLevel': 0.43, 'text': 'NV Parking Parkpoort', 'index': 0, 'regions': [[{'x': 1064, 'y': 242}, {'x': 1139, 'y': 243}, {'x': 1798, 'y': 313}, {'x': 1472, 'y': 308}]]}, 'merchantTypes': {'data': ['Parking'], 'confidenceLevel': 0.43, 'text': 'NV Parking Parkpoort', 'index': 0, 'regions': [[{'x': 1064, 'y': 242}, {'x': 1139, 'y': 243}, {'x': 1798, 'y': 313}, {'x': 1472, 'y': 308}]]}, 'elapsed': 6120.469925001264}}