0

我正在将 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);
    }
});

我的问题是是否有任何内置/更简单的方法可以仅使用 LowDB 甚至使用 lodash 来实现相同的结果?此外,似乎以这种方式将数据持久保存到数据库中很可能是因为使用了,value()但我找不到任何其他方法来实现这一点。

提前致谢。

4

1 回答 1

0

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

首先,我writeOnChange: false在需要时添加了选项lowdb

var lowdb = require('lowdb')('db.json', {
    writeOnChange: false
});

然后我cloneDeep()在查询时使用了方法。请注意,这LowDB是一个返回的角度服务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();
于 2016-12-29T10:06:57.393 回答