我正在开发一个带有NeDB存储的电子应用程序(一个面向javascript文档的数据库,它使用类似Mongodb的API),但这段代码与Electron无关。
我正在尝试更新所有文档的extractions
字段。此代码已简化,实际代码不会仅添加[1, 2, 3]
。
问题是这段代码为db中的每个文档添加了一个具有相同_id
的第二个文档,因此它就像绕过了唯一的_id
约束。
您可以运行此代码,并查看具有相同值的多个_id
。
编辑 以便更好地查看问题,请先执行第1部分,然后对其进行评论并执行第2部分。您将看到2个具有相同_id的文档。一个使用extractions: [1, 2, 3]
,一个使用extractions: ["test1", "test2","test3"]
。
const Datastore = require('nedb');
let db = new Datastore({filename: "data2.db", autoload: true});
//---------PART 1------------
db.insert({_id: new Date('03/06/2017Z'), extractions: [1, 2, 3]}, function (err, newDoc) {
if (err)
console.log(err);
else
console.log(newDoc);
});
//---------PART 2------------
/* db.find({})
.sort({_id: -1})
.exec(function (err, docs) {
var promiseList = [];
docs.forEach(function (doc) {
promiseList.push(PromisifiedFindAndUpdate(doc._id))
});
Promise.all(promiseList).then(values => {
console.log(values)
});
});
*/
let PromisifiedFindAndUpdate = function (id) {
return new Promise(function (resolve, reject) {
db.findOne({_id: id}, function (err, doc) {
let updated_extractions = ["test1", "test2","test3"];
db.update({_id: id}, {$set: {"extractions": updated_extractions}}, {}, function (err, docs) {
if (err) {
return reject(err);
}
return resolve(docs);
});
});
});
};