用 LowDB 中其他集合中的记录数据填充 id 字段

Populate id field with record data in other collection in LowDB

我正在将 LowDB 用于一个小型应用程序,其中我的 db.json 具有与此类似的结构:

{
  "clients": [
    {
      "id": "ad839854-a53a-4287-9f94-7e7e3f2b8cab",
      "name": "some name"
    }
  ],
  "jobs": [
    {
      "id": "ad839854-a53a-4287-9f94-7e7e3f2b8cac",
      "type": "fix",
      "client": "ad839854-a53a-4287-9f94-7e7e3f2b8cab"
    }
  ]
}

我想要实现的是查询所有作业并自动将客户端 属性(使用客户端 ID)填充到它自己的数据中以显示在 UI 中,而无需坚持它回到数据库。 我设法用几行 javascript:

来做到这一点
var vm = this;
vm.jobs = LowDB.get('jobs').value();
var jobClient = null;
angular.forEach(vm.jobs, function (job) {
    if(job.client) {
        jobClient = LowDB.get('clients').find({id: job.client}).value();
        job.client = jobClient;
        console.log(job.client);
    }
});

我的问题是是否有任何 built-in/simpler 方法可以仅使用 LowDB 甚至使用 lodash 来获得相同的结果?此外,由于使用了 value(),它似乎以这种方式将数据持久保存到数据库中,但我找不到任何其他方法来实现这一点。

提前致谢。

在仔细阅读 LowDB 文档后,我最终对代码进行了一些更改。

首先我在需要 lowdb:

时添加了 writeOnChange: false 选项
var lowdb = require('lowdb')('db.json', {
    writeOnChange: false
});

然后我在查询的时候用了cloneDeep()的方法。请注意 LowDB 是一个 angular 服务 returns lowdb:

vm.job = LowDB.get('jobs').find({id: $routeParams.id}).cloneDeep().value();
vm.clients = LowDB.get('clients').cloneDeep().value();
angular.forEach(vm.jobs, function (job) {
    angular.forEach(vm.clients, function (client) {
        if(client.id === job.client) {
            job.client = client;
        }
    });
});

这样,我实现了我想要的查询,并且数据不再持久化到数据库中。它只会在调用后持续存在:

LowDB.write();