Вставка MongoDB повышает повторяемость ключа
При попытке сделать объемную вставку в пустую коллекцию mongodb возникает следующая ошибка.
pymongo.errors.DuplicateKeyError: E11000 повторяющийся индекс ошибок ключа: cmdDistros.locDistro. $ id dup key: {: ObjectId ('51dac9d0c74cd81acd85c0fd')}
Я не указываю _id, когда я создаю любой из документов, поэтому mongodb должен создать уникальный индекс правильно? Вот код, который я использовал:
#Populate database with uniform distribution entries = [] for coor in freeIndices: for theta in range(360): entry = {"x" : coor[0], "y" : coor[1], "heading" : theta} for i in range(numData): entry["data" + str(i)] = 1./numData entries.append(entry) print "Entries created, loading into database..." locDistro.insert(entries)
Принимая судьбу из рук mongoDB, я попытался создать свой собственный индекс, используя:
#Populate database with uniform distribution entries = [] idNum = 0 for coor in freeIndices: for theta in range(360): print idNum entry = {"_id" : idNum, "x" : coor[0], "y" : coor[1], "heading" : theta} idNum += 1 for i in range(numData): entry["data" + str(i)] = 1./numData entries.append(entry) print "Entries created, loading into database..." locDistro.insert(entries, manipulate = False)
Заявление о печати показывало каждый idnum, поскольку документы были созданы, и все они были уникальными и увеличивались так же, как ожидалось. Однако при вставке я получил ошибку:
pymongo.errors.DuplicateKeyError: E11000 дубликат ключевой индекс ошибки: cmdDistros.locDistro. $ id dup key: {: 0}
и только один документ был вставлен в мою базу данных.
Я полностью в тупике, у каждого есть ответ, почему это может произойти?
- Как сделать больше или меньше, чем использовать MongoDB?
- Определите новую численную базу в python (новая кодировка)
- Python: недопустимый буквенный индекс для базы данных Int () 10
- Структура данных для базы данных текстовых материалов
- Удаление частичных данных в mongoDB
Вам нужно понять, что в вашем списке записей есть куча ссылок на одну запись dict. Поэтому, когда PyMongo устанавливает записи [0] ['_ id'], все остальные записи получают один и тот же _id. (На самом деле PyMongo будет перебирать список, задавая каждый элемент _id каждой записи, поэтому все записи будут иметь окончательный _id в конце.) Быстрое исправление:
entries.append(entry.copy())
Это всего лишь мелкая копия, но в коде, который вы поделили, я считаю, что этого достаточно, чтобы исправить вашу проблему.
Удалить ключ _id
for i in xrange(2): doc['i'] = i if '_id' in doc: **del doc['_id']** collection.insert(doc)
* Или создать вручную ew onea n: Задать вопрос
from bson.objectid import ObjectId* for i in xrange(2): doc['i'] = i doc['_id'] = ObjectId() collection.insert(doc)
Получение «err»: «Ошибка повторения ключа E11000 при вставке в монго с использованием драйвера Java
- Как объединить два списка кортежей на основе ключа?
- элементы numpy массива округляются автоматически?
- SQLAlchemy – самореляционное отношение Many-to-many с дополнительным столбцом
- Django / SQL: отслеживание того, кто читает что на форуме
- Обновление Pymongo: возможно ли вставить поле с '$ currentDate' только один раз?
- Лучшая база данных DataMining
- Как бы вы смоделировали эту связь с базой данных?
- Pymongo $ addToSet не работает
- Могу ли я использовать ту же базу данных MongoDB из Python и NodeJS
- Сохранение битрейзов в MongoDB
- Как обновить Mongo-документ после его вставки?