我有一個 MongoDB 集合,它使用成批的 DataFrame 順序更新:
print(batch_df_0)
id date shop product
1 28/10/2021 1 apple
2 28/10/2021 2 apple
3 28/10/2021 3 apple
##################
# MongoDB Update #
##################
print(batch_df_1)
id date shop product
1 28/10/2021 1 apple # not to be uploaded, since already in DB
1 29/10/2021 1 apple # OK
1 29/10/2021 1 banana # OK, since product is not key
10 29/10/2021 1 apple # OK
1 29/10/2021 2 banana # OK
1 29/10/2021 3 apple # OK
print(batch_df_1_to_be_updated)
id date shop product
1 29/10/2021 1 apple
1 29/10/2021 1 banana
10 29/10/2021 1 apple
1 29/10/2021 2 banana
1 29/10/2021 3 apple
##################
# MongoDB Update #
##################
我想確保我不會在同一行上傳兩次(例如 1 28/10/2021 1 個來自 batch_df_1 的蘋果,它已經存在于 batch_df_0 中),給定“id”、“date”和“shop”作為資料庫應控制重復項的鍵。
到目前為止,我已經嘗試將復合索引設定為:
compound_index = [('id', 1), ('date', 1), ('shop', 1)]
collection.create_index(compound_index, unique=True)
insert_result = collection.insert_many(batch_df_1.to_dict("records"))
但是,一旦發現重復項,它就會停止上傳。
對于 DataFrame 的每一行,是否有一種有效的方法可以確保重復檢查,而不會 停止整個 DataFrame 上傳?
uj5u.com熱心網友回復:
傳遞ordered=False給insert_many操作,讓它繼續推送其他檔案,最后拋出例外。
try:
insert_result = collection.insert_many(batch_df_1.to_dict("records"), ordered=False)
except:
# Ignore Error
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/340238.html
