簡體   English   中英

nedb方法更新和刪除會創建一個新條目,而不是更新現有條目

[英]nedb method update and delete creates a new entry instead updating existing one

我正在使用nedb ,我正在嘗試通過匹配它的ID和更改title屬性來更新現有記錄。 會發生什么,創建一個新記錄,舊記錄仍然存在。 我嘗試了幾種組合,並嘗試谷歌搜索,但搜索結果很少。

 var Datastore = require('nedb'); var db = { files: new Datastore({ filename: './db/files.db', autoload: true }) }; db.files.update( {_id: id}, {$set: {title: title}}, {}, callback ); 

執行刪除時更加瘋狂,再次添加新記錄,但這次記錄有一個奇怪的屬性: {"$$deleted":true,"_id":"WFZaMYRx51UzxBs7"}

這是我正在使用的代碼:

 db.files.remove({_id: id}, callback); 

在nedb文檔中,它說:

localStorage有大小限制,因此如果客戶端應用程序需要大量更新和刪除,那么每隔2-5分鍾設置一次重復壓縮以節省空間可能是個好主意。 有關NeDB使用的僅附加格式的更多詳細信息,請參閱數據庫壓縮

壓縮數據庫

在引擎蓋下,NeDB的持久性使用僅附加格式,這意味着所有更新和刪除實際上都會導致在數據文件末尾添加行。 這樣做的原因是磁盤空間非常便宜,並且附加速度比重寫快得多,因為它們不進行搜索。 每次應用程序重新啟動時,數據庫都會自動壓縮(即以每個文檔一行的格式放回)。

您可以使用不帶參數的Database.persistence.compactDatafile手動調用壓縮函數。 它將執行程序中數據文件的壓縮隊列排隊,在所有掛起操作之后按順序執行。

您還可以使用yourDatabase.persistence.setAutocompactionInterval(interval)定期自動壓縮,以毫秒為單位的間隔(強制執行最少5秒),並使用yourDatabase.persistence.stopAutocompaction()停止自動壓縮。

請記住,壓縮需要花費一些時間(不要太多:我的慢速機器上的50k記錄為130ms),並且當它執行時不會發生其他操作,因此大多數項目實際上不需要使用它。

我沒有使用它,但似乎它使用localStorage並且它具有僅用於更新和刪除方法的格式。

在調查其源代碼時, persistence.tests 中進行搜索時 ,他們希望確保檢查$$delete鍵,他們也提到了`如果一個doc包含$$ deleted:true,那意味着我們需要將它從數據`中刪除。

所以,在我看來,你可以嘗試手動壓縮數據庫,或者在你的問題中; 第二種方式可能很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM