mongo中update_one與find_one_update異同
在使用mongo時,想要更新一個文檔的數據時,有update_one與find_one_update兩種方法可供使用。
共同點
兩個方法的傳入參數都差不多,主要參數都是filter,update,upsert。兩個方法都是用於更新一個文檔的數據。
差異
update_one並不會返回文檔的數據,而find_one_update會返回文檔的數據。並根據returnNewDocument參數確定返回的是更新前的數據還是更新后的數據
find_one_update的returnNewDocument參數
returnNewDocument為bool值。
- 默認值為false,返回更新前的文檔。當upsert為true,且插入了文檔,返回值為null
- 若returnNewDocument為true則返回更新后的文檔。當upsert為true,且插入了文檔,返回值為插入的文檔
find_one_update用處
當你需要在更新時返回文檔的數據,應該使用此方法。它相當與在數據庫層面結合了update與find兩個方法,避免了在並發狀況下所讀數據不一致。
例如你update了之后在應用程序端再去find一個文檔,這期間該文檔可能已經被其他終端修改過,這種情況下文檔中的數據已經不是你update之后的數據了。
當然,如果不需要更新文檔的數據,就直接用update_one方法即可,不必返回多余的數據,效率更高。