1

我正在使用 LokiJS,它适用于大多数部分。除了我似乎无法从数据库中删除记录。

查找让我删除了正确的记录,但是 remove() 和 findAndRemove() 在 saveDatabase 之后都没有删除它。我究竟做错了什么?

(注意:我已经在 loadDatabase(...) 回调之外尝试了 saveDatabase - 没有变化。每当我重新运行它时,我认为我删除的记录仍然存在)

这是代码:dbName 是文件的有效路径

var db = new loki(dbName);

db.loadDatabase({}, function (e) {

    var orders = db.getCollection("orders");

        console.log(orders.count() + " orders found... iterating");
        orders.find().forEach((v, i) => {
            console.log(i + "." + v.key + " " + v.places.display + " " + v.theme + " " + moment(v.date).format("DD MMM YYYY HH:mm"));
        });
    }

     let dKey = "some key that is valid";
        if (!dKey) {
            console.log("no key specified, returning");
            return;
        }
        console.log("deleting specific record " + dKey);
        let dObj = orders.find({ key: dKey });
        if (!dObj || dObj.length == 0) {
            console.log("no such record, returning");
            return;
        }
        console.log(dObj[0]);
        orders.remove(dObj[0]);
        db.saveDatabase((e) => {
            console.log("save complete");
        });
    }
});
4

2 回答 2

3

尝试:orders.chain().find({ key: dKey }).remove()

于 2017-02-09T14:52:49.443 回答
0

我在使用 lokijs 时遇到了同样的问题,所以把它放在这里以便它可以帮助其他人在未来寻找同样的问题。

我试图在 db 中查找具有特定$loki值的记录,但我得到一个空的 ResultSet。然后我尝试了这个。 data.chain().find({"$loki":{$aeq:serial}}).remove().data(). 在这里,data是我的数据库实例,serial$loki我正在寻找并传递给find(). 似乎 lokijs 将它们存储为字符串,这就是为什么$aeq起作用,我能够找到并删除所需的记录

于 2020-08-31T06:37:35.983 回答