談談 lowdb 的使用

1

關於標記

之前在上面這篇博文寫到想做一個標記的本地應用,最近感覺想法成型了,於是開始研究怎麼做出來.

中間種種過程略去不提,但談我最後選用 electron 來開發,然後需要用到數據庫,沒怎麼比較,選擇了 lowdb 這個基於json 的小型數據庫.

先貼官方鏈接.

Githug-lowdb

然後入門教程看的這篇 : Electron-vue開發實戰2——引入基於Lodash的JSON數據庫lowdb .

2

使用過程中有幾個需求沒找到明確的解決方式.

比如對數組元素的刪除.

例 :

["快樂","開心","悲傷"]

官方文檔沒找到 ''對象A 作爲一個 對象B 的屬性時,如何通過查詢 對象A 的屬性 獲取 對象B" 的方法.

有點繞吧,還是舉個例子 :

{
  name : "車",
  component : {
    "輪胎" : "香港造"
    ...
  }
}

沒有直接通過查詢 輪胎 獲取 這整塊數據的方式.

3

對官方提供的幾個 api 翻來過去的組合搭配也沒能成功.

我太傻雕了.

看到提供了自定義操作的方法,差點準備自己實現了.

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

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

其實這個就是 lodash 提供的接口…

另外 lodash-id 等插件就是通過這個 api 注入進去的

太沙雕了.

這不是很複雜的操作,不應該這麼複雜啊…

仔細翻了一下文檔,才注意到 lowdb 是基於 lodash 的,可以使用 lodash 的 api …

眼前一亮,去翻了一下 lodash 的 api …

lodash

果然找到…

4

上面提到的第一個問題,刪除數組屬性,可以通過 remove 實現.

看看我封裝的函數…

// 刪除 標籤
export function deleteTagByName(tagName) {
    db.read().get('tag')
        .remove(function(n) {
            // console.log(n);
            // console.log(tagName);
            return n === tagName;
          })
        .write();
}

而深查詢…

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

傳一個具有兩個元素的數組,就會分別匹配鍵值.

5

再來一個數組與深查詢組合拳…

[ {
    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();
}

靈活組合也能實現許多強大的查詢誒…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章