使用LowDB

时间:2016-12-27 10:05:22

标签: javascript angularjs lodash nwjs

我正在将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()但我找不到任何其他方法来实现此目的。

提前致谢。

1 个答案:

答案 0 :(得分: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();