0

我正在开发一个带有 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);
                });
            });

        });
    };
4

0 回答 0