谈谈 lowdb 的使用

Update

2020-03-12

LT;DR;

博主在使用 lowdb 时遇到了几个需求光靠 lowdb 提供的 API 无法实现。其实 lowdb 是基于 Lodash 的,可以使用 Lodash 提供的 API 实现自己的一些需求。比如下面提到的「数组删除元素」与「深查询」。

基本上查看下面的文档就行了。

lowdb 的 Github 仓库

Lodash 官方文档

原文

之前在 关于标记 这篇博文写到想做一个标记的本地应用,最近感觉想法成型了,于是开始研究怎么做出来。

中间种种过程略去不提,但谈我最后选用 electron 来开发,然后需要用到数据库。没怎么比较,选择了 lowdb 这个基于json 的小型数据库。

先贴官方链接。

lowdb 的 Github 仓库

然后入门教程看的这篇:Electron-vue开发实战2——引入基于Lodash的JSON数据库lowdb


使用过程中有几个需求没找到明确的解决方式。

比如对数组元素的删除。例如有一个数组:

["快乐","开心","悲伤"]

没有提供直接删除数组元素的方法。

其次,没在官方文档找到 「对象A 作为 对象B 的属性时,如何通过查询 对象A 的属性 获取 对象B」,即深查询的方法。

有点绕吧,还是举个例子:

{
  name : "车",
  component : {
    "轮胎" : "香港造"
    ...
  }
}

没有直接通过查询 轮胎 获取 这整块数据的方式。


对官方提供的几个 api 翻来过去的组合搭配也没能成功。

看到提供了自定义操作的方法,差点准备自己实现了。

db._.mixin({
  second: function(array) {
    return array[1]
  }
})

db.get('posts')
  .second()
  .value()

其实这个就是 lodash 提供的接口…

另外 lodash-id 等插件就是通过这个 api 注入进去的。

太沙雕了。

这不是很复杂的操作,不应该这么复杂啊…

翻读了几遍文档,才注意到 lowdb 基于 Lodash 的。

眼前一亮,去翻了一下 Lodash 的 API…

Lodash 官方文档


上面提到的第一个问题,删除数组属性,可以通过 Lodash 的 remove 实现。如下:

// 删除 标签
export function deleteTagByName(tagName) {
    db.read().get('tag')
        .remove(function(n) {
            return n === tagName;
          })
        .write();
}

而深查询可以这样:

export function getItemByName(name) {
    return db.read().get('item')
        .filter(["template_style.name", name])
        .value();
}

传一个具有两个元素的数组,就会分别匹配键值。


稍微复杂点的例子

来一个数组与深查询组合拳…

数据如下:

[ {
    id: 7,
    template_name: "单曲",
    template_style: {

        "name": "菊次郎的夏天",
        "作者": "久石让",
        "状态": "听过",
        "标记时间": "2019-02-10"

    },
    tag_name: ["童年"]
}, {
    id: 8,
    template_name: "单曲",
    template_style: {

        "name": "荡起双桨",
        "作者": "佚名",
        "状态": "听过",
        "标记时间": "2019-03-10"

    },
    tag_name: ["童年", "恐怖"]
}]

如何通过 标签名 查询该 标签 下的 所有条目?

可以这样:

// 通过 标签名 获取 条目
export function getItemsByTagName(tagName) {
    return db.read().get('item').filter(function (item) {
        if (item.tag_name.indexOf(tagName) !== -1) {
            return true;
        } else {
            return false;
        }
    }).value();
}
NI Multisim是一款功能强大的电子电路仿真软件,可用于设计、分析和验证电路。以下是关于NI Multisim使用的一些要点: 1. 电路设计:NI Multisim提供了直观的界面,使用户能够轻松创建电路图。您可以从库中选择并放置元件,然后使用连线工具进行连接。该软件支持模拟和数字电路设计,并提供了各种元件和模型供您选择。 2. 元件库:NI Multisim拥有广泛的元件库,包括传统的模拟和数字电路元件,以及各种传感器、器件和微控制器等。您可以根据需要选择合适的元件并将其拖放到电路图中。 3. 仿真分析:NI Multisim具有强大的仿真引擎,可以模拟电路的行为。您可以进行直流、交流、传输函数、傅里叶和数字时域仿真等。仿真结果可以帮助您评估电路性能、验证设计是否符合预期,并进行优化。 4. 虚拟仪器:NI Multisim集成了各种虚拟仪器,如示波器、函数发生器和多用途仪表等。这些仪器可以与您的电路连接,以帮助您观察和分析电路行为。 5. PCB设计:除了电路仿真,NI Multisim还可以与NI Ultiboard(一个PCB设计软件)无缝集成,以便将设计转化为实际的电路板。 6. 教学资源:NI Multisim提供了丰富的教学资源,包括教学实验和课程内容。这些资源可以帮助学生和教师更好地理解和应用电子电路原理。 总而言之,NI Multisim是一款功能强大且易于使用的电子电路仿真软件,适用于学习、设计和验证各种电路。它的仿真分析功能和丰富的元件库使得用户能够快速而准确地评估电路性能和设计方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值