我有一個Python應用程序迭代遍歷MongoDB(3.0.2)集合中的每個文檔(通常介於10K和1M文檔之間),並添加新字段(可能使文檔中的字段數增加一倍/三倍) 。將多個字段添加到MongoDB集合中的所有文檔的首選方式是什麼?
我最初的想法是,我會用UPSERT修改後的文件(使用pyMongo)的全部 - 我現在質疑的是:
- 鑑於修訂後的文件是顯著更大,我應該只將新的領域,或只是替換文件?
- 此外,按文檔或批量對文檔中的集合執行寫入操作會更好嗎?
我有一個Python應用程序迭代遍歷MongoDB(3.0.2)集合中的每個文檔(通常介於10K和1M文檔之間),並添加新字段(可能使文檔中的字段數增加一倍/三倍) 。將多個字段添加到MongoDB集合中的所有文檔的首選方式是什麼?
我最初的想法是,我會用UPSERT修改後的文件(使用pyMongo)的全部 - 我現在質疑的是:
這實際上是一個很好的問題,可以通過幾種不同的方法解決,具體取決於您如何管理數據。
如果您正在插入其他字段,這是否意味着您的數據在稍後的時間點附加了其他字段,唯一的變化是添加了其他字段?如果是的話,你可以set the ttl on your documents so that the old ones drop off over time。請記住,如果你這樣做,你會希望設置一個索引,通過降低_id來排序結果,以便在較老的之前選擇最近的添加。
這樣做這樣做的好處是,您不斷地寫數據,而不是尋找和更新數據,因此速度更快。
關於upserts vs bulk inserts。由於批量插入requires you to find the original document first,批量插入始終比插入更快。
db.document.find_one()
而不是db.document.find()
,以便只返回當前記錄。