collection.insert_many () ожидает список dict, просто загрузив содержимое txt-файла в строку и разделив на «;», вы получите список строк, таких как
'a={ "_id" : "67a2c0e2e559fb56bf055502", "field1" : "value1", "field2" : ["value21","value22"], "field3" : { "_id" : "37a2c0e2e559fb56bf055502", "subfield1" : "subvalue1" } }'
Иpymongo / mongodb не позволяет вставлять строки, он ожидает документы (python dict's)
См. ниже (используется insert_one
, но принцип такой же, как у insert_many
):
s = 'a={ "_id" : "67a2c0e2e559fb56bf055502", "field1" : "value1", "field2" : ["value21","value22"], "field3" : { "_id" : "37a2c0e2e559fb56bf055502", "subfield1" : "subvalue1" } }'
c.insert_one(s) # raise TypeError: document must be an instance of dict, bson.son.SON, bson.raw_bson.RawBSONDocument,...
Что вам нужно сделать, это загрузить строку в dict:
dic = { "_id" : "67a2c0e2e559fb56bf055502", "field1" : "value1", "field2" : ["value21","value22"], "field3" : { "_id" : "37a2c0e2e559fb56bf055502", "subfield1" : "subvalue1" } }
c.insert_one(dic)
Если вам удастся превратить ваши строки как 'a = {"key1": "value1", "key2": "value2"} 'в строки типа' {"key1": "value1", "key2: value2"} ', затем вы можете использовать eval
, чтобы превратить строку в диктовку с помощью my_dict=eval('{"key1":"value1", "key2":"value2"}')