Массовая вставка, обновление значений mongodb - PullRequest
1 голос
/ 27 сентября 2019

Каждый день я запускаю cron для массовой вставки.Но некоторые значения пропускаются, и когда я перезапускаю данные, они добавляются к существующим данным, а не обновляются.Есть ли способ сделать вставку только тех документов, которые еще не были вставлены.

Мой код:

query = bigQuery.get_data(query)
bulk = col.initialize_unordered_bulk_op()

for i, row in enumerate(query):
    bulk.insert({
        'date': str(row['day_dt']),
        'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
        'site': row['site_nm'],
        'val_counts': row[8]
    })

bulk_result = bulk.execute()

Прямо сейчас он заново вставляет все значения при каждом выполнении запроса.Есть ли способ добавлять только те значения, которые еще не были добавлены.

1 Ответ

0 голосов
/ 27 сентября 2019

Я, очевидно, не полностью знаю вашу структуру данных, и не совсем ясно, что вы пытаетесь сделать, но я думаю, что это следует сделать.

query = bigQuery.get_data(query)

new_things = []
for i, row in enumerate(query):
    if not col.find_one(your_query): # make sure that the document does not exist already
        # add data to an array
        new_things.append({
        'date': str(row['day_dt']),
        'dt': datetime.strptime(str(row['day_dt']), '%Y-%m-%d'),
        'site': row['site_nm'],
        'val_counts': row[8]
    })

# use insert_many to insert all the documents
bulk_result = col.insert_many(newthings)

Проверьте комментарии рядом с кодом для объяснения.Если вы новичок, как вы упомянули, я бы придерживался более простого способа делать вещи и масштабировать ваш код по мере роста вашего опыта.

...