Nedb更新添加新记录,而不是更新现有的一个

问题描述:

我真的很苦恼,所以我希望有人可以帮助我理解为什么我得到这种行为。Nedb更新添加新记录,而不是更新现有的一个

我在它与以下记录的文件

{"Id":"","documentPath":"mission.pdf","dName":"BIOLOGY TEST 1110","dCourseNumber":"1110","dSubject":"BIOL","dTerm":"201690","dTitle":"BIOLOGY TEST 1110","student":"491502","timestamp":1486152313972,"assessed":true,"errorCmt":"","uploadDate":"2/3/2017 14:5","_id":"QwKHQ8sRQdivRJDp"} 
{"Id":"","documentPath":"university.pdf","dName":"BIOLOGY TEST 1111","dCourseNumber":"1111","dSubject":"BIOL","dTerm":"201690","dTitle":"BIOLOGY TEST 1111","student":"491502","timestamp":1486151521825,"assessed":false,"errorCmt":"","uploadDate":"2/3/2017 13:52","_id":"mh0pdGERB6fZU4s3"} 
我testdb.js

文件我有:

var Datastore = require('nedb'); 
var db = new Datastore({filename: './db.db', autoload: true}); 

db.update({ _id: "QwKHQ8sRQdivRJDp"}, { $set: { assessed: true} }, {}, function (err, numReplaced) { 
    console.log("replaced---->" + numReplaced); 
}); 

db.find({}).exec(function (err, docs) {console.log(docs);}); 

我在最后执行查找表明,我已经更新一个单独的记录并打印出记录,他们看起来像我期望的那样。如果我打开db.db我现在看到这一点:

{"Id":"","documentPath":"mission.pdf","dName":"BIOLOGY TEST 1110","dCourseNumber":"1110","dSubject":"BIOL","dTerm":"201690","dTitle":"BIOLOGY TEST 1110","student":"491502","timestamp":1486152313972,"assessed":true,"errorCmt":"","uploadDate":"2/3/2017 14:5","_id":"QwKHQ8sRQdivRJDp"} 
{"Id":"","documentPath":"university.pdf","dName":"BIOLOGY TEST 1111","dCourseNumber":"1111","dSubject":"BIOL","dTerm":"201690","dTitle":"BIOLOGY TEST 1111","student":"491502","timestamp":1486151521825,"assessed":false,"errorCmt":"","uploadDate":"2/3/2017 13:52","_id":"mh0pdGERB6fZU4s3"} 
{"Id":"","documentPath":"mission.pdf","dName":"BIOLOGY TEST 1110","dCourseNumber":"1110","dSubject":"BIOL","dTerm":"201690","dTitle":"BIOLOGY TEST 1110","student":"491502","timestamp":1486152313972,"assessed":true,"errorCmt":"","uploadDate":"2/3/2017 14:5","_id":"QwKHQ8sRQdivRJDp"} 

任何想法,为什么我的记录与新值复制,而不是刚刚更新?

所以事实证明这是在文档中解释。

在底层,NeDB的持久性使用append-only格式,这意味着出于性能原因,所有更新和删除实际上都会在数据文件末尾添加行。

return this.db.update({ _id: "QwKHQ8sRQdivRJDp"}, { $set: { assessed: true} }, function (err, numReplaced) { 
    if (err) { 
     console.log("error---->" + err); 
    } else { 
     console.log("replaced---->" + numReplaced); 
    } 
}); 

,如果你想真正的“更新”和“删除”,你应该压缩您的数据库,请参阅此相关的问题我相信这explenation让你试试这个

NeBD只使用追加-性能行话了解更多关于Nedb的信息 - nedb method update and delete creates a new entry instead updating existing one