我正在开发一个带有 NeDB 存储的 Electron 应用程序(一个使用类似 Mongodb 的 API 的面向 javascript 文档的数据库),但此代码与 Electron 无关。
我正在尝试更新extractions
所有文档的字段。这段代码被简化了,真正的代码不只是添加[1, 2, 3]
. 问题是这段代码为数据库中的每个文档添加了第二个文档_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);
});
});
});
};