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