いくつかの大きなファイル (約 400 万レコード) を mongo インスタンスにプッシュしようとしています。私が基本的に達成しようとしているのは、既存のデータをファイルのデータで更新することです。アルゴリズムは次のようになります。
rowHeaders = ('orderId', 'manufacturer', 'itemWeight')
for row in dataFile:
row = row.strip('\n').split('\t')
row = dict(zip(rowHeaders, row))
mongoRow = mongoCollection.find({'orderId': 12344})
if mongoRow is not None:
if mongoRow['itemWeight'] != row['itemWeight']:
row['tsUpdated'] = time.time()
else:
row['tsUpdated'] = time.time()
mongoCollection.update({'orderId': 12344}, row, upsert=True)
ですので、重みが同じなら「tsUpdated」以外の行全体を更新し、行がmongoにない場合は新しい行を追加するか、「tsUpdated」を含む行全体を更新する...これがアルゴリズムです
問題は、モンゴの観点から、これをより速く、より簡単に、より効率的に行うことができるかということです。(最終的には、ある種の一括挿入を使用)