Вставка списка словарей в mongodb и удаление ключей int - PullRequest
0 голосов
/ 31 мая 2019

Мне нужно вставить список словарей с таким синтаксисом (у меня более 6500 таких слов):

0: {208271891: {'bra': 'Solarmax',
             'bri': 4,
             'eur': 95.4,
             'max': 1980,
             'nam': '2000S',
             'pan': {'bra': 'Sanyo',
                     'bri': 3,
                     'eff': 16,
                     'h': 861,
                     'hea': 50,
                     'mni': 1,
                     'mnm': 'free standing',
                     'n': 7,
                     'nam': 'HDE1 230',
                     'slo': 35,
                     't': -0.3,
                     'w': 1610,
                     'wp': 230},
             'pha': 1,
             'rat': 0.81,
             'wp': 1610}},

1: {208271900: {'bra': 'Solarmax',
             'bri': 4,
             'eur': 95.4,
             'max': 1980,
             'nam': '2000S',
             'pan': {'bra': 'Sanyo',
                     'bri': 3,
                     'eff': 16,
                     'h': 861,
                     'hea': -40,
                     'mni': 1,
                     'mnm': 'free standing',
                     'n': 9,
                     'nam': 'HDE1 230',
                     'slo': 30,
                     't': -0.3,
                     'w': 1610,
                     'wp': 230},
             'pha': 1,
             'rat': 1.05,
             'wp': 2070}},

 2: {208271892: {'bra': 'Solarmax',
             'bri': 4,
             'eur': 95.4,
             'max': 1980,
             'nam': '2000S',
             'pan': {'bra': 'Sanyo',
                     'bri': 3,
                     'eff': 16,
                     'h': 861,
                     'hea': 50,
                     'mni': 1,
                     'mnm': 'free standing',
                     'n': 9,
                     'nam': 'HDE1 230',
                     'slo': 30,
                     't': -0.3,
                     'w': 1610,
                     'wp': 230},
             'pha': 1,
             'rat': 1.05,
             'wp': 2070}}

Я пытался удалить ключи с помощью dict.pop () и 'del', но получил эту ошибку: 'TypeError:' int 'объект не поддерживает удаление элемента'.

slMetadata = {}    

for row in metadatas: #metadatas coming from mysql

   mid = int(row['met_id'])
   slMetadata.update(mid = mid)

   bsInv = {
          mid: 
             {
             'wp' : wp,
             'bra': str(row['invbraname']),
             'bri': int(row['inm_bra_id']),
             'nam': str(row['inm_name']),
             'pha': int(row['inm_phases']),
             'max': int(row['inm_maximal_power']),
             'eur': float(row['inm_euro_efficiency']),
             'pan':
                  {
                  'n'  : int(row['inv_pan_numbers']),
                  'hea': int(row['inv_pan_heading']),
                  'slo': int(row['inv_pan_slope']),
                  'mni': int(row['inv_mnt_id']),
                  'mnm': str(row['mnt_name']),
                  'bra': str(row['panbraname']),
                  'bri': int(row['pan_bra_id']),
                  'nam': str(row['pan_name']),
                  'wp' : int(row['pan_wc']),
                  'eff': int(row['efficiency']),
                  't'  : float(row['coefficient_p']),
                  'w'  : int(row['pan_width']),
                  'h'  : int(row['pan_height'])
                  }
             }         
        }
i = 0
dictToInsert = {}
for dic in slMetadata:
    dictToInsert[i] = slMetadata[dic]
    i += 1

if len(dictToInsert) > 0:
   insertion = dbCollection.insert_many(dictToInsert)

То, что я хочу, это вставить все эти диктовки в mongoDb, но у меня есть ошибка ниже: bson.errors.InvalidDocument: документы должны иметь только строковые ключи, ключ был 0.

Что я полностью понимаю и знаю, что не могу вставить в mongoDb с помощью клавиши 'int'. Но какова альтернатива?

Спасибо.

1 Ответ

0 голосов
/ 31 мая 2019

Попробуйте

dictToInsert[str(i)] = slMetadata[dic]

вместо

dictToInsert[i] = slMetadata[dic]
...