Nem*_*vic 4 javascript node.js express-4 nedb nw.js
我正在使用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
);
Run Code Online (Sandbox Code Playgroud)
执行删除时更加疯狂,再次添加新记录,但这次记录有一个奇怪的属性:
{"$$deleted":true,"_id":"WFZaMYRx51UzxBs7"}
这是我正在使用的代码:
db.files.remove({_id: id}, callback);
Run Code Online (Sandbox Code Playgroud)
İlk*_*kut 10
在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,那意味着我们需要将其从数据`中删除.
所以,在我看来,你可以尝试手动压缩数据库,或者在你的问题中; 第二种方式可能很有用.
归档时间: |
|
查看次数: |
3579 次 |
最近记录: |