Попытка вставить новые данные в базу данных Монго, которая может намеренно содержать дубликаты - PullRequest
0 голосов
/ 01 мая 2018

Мой код собирает данные для группы ETFS, используя встроенные в Pandas алгоритмы сбора данных, и в течение дня и в конце, с данными за 5 лет. Индекс моих панд df - это индекс даты и времени.

Когда я создавал свою историческую базу данных, все работало хорошо. Теперь я хочу ежедневно обновлять свою базу данных с помощью задания cron, и для этого я создал временный «буфер».

Так что я думаю, что когда я пытаюсь вставить данные, которые уже находятся в БД, Монго пропустит их (в конце концов, я создал дату в качестве индекса). Таким образом, с этой идеей, если одна или несколько акций не имели данных за последние несколько дней, пытаясь вставить данные с избыточностью, я могу получить полную базу данных.

Однако я получаю следующую ошибку:

DuplicateKeyError: E11000 коллекция повторяющихся ошибок ключа: ETFs.EEM индекс: идентификатор ключ дубликата: {: новая дата (1524700800000)}

Насколько я понимаю, монго должно было пропустить это. Что не так с этим кодом?

def insert_to_mongo():
    for x in etfs.keys():
        print 'Processing ' + x
        data_points = len(etfs[x])
        for i in range(data_points):
            data = ({
                '_id': etfs[x].index[i],
                'open': float(etfs[x].iloc[i]['open']),
                'high': float(etfs[x].iloc[i]['high']),
                'low': float(etfs[x].iloc[i]['low']),
                'close': float(etfs[x].iloc[i]['close']),
                'adj close': float(etfs[x].iloc[i]['adj close']),
                'volume': float(etfs[x].iloc[i]['volume']),
                })
            collection = db[x]
            collection.insert_one(data)
    print 'Inserted data successfully'
...