Neo4j: 信息分類建模

麻煩建立一個 neo4j 標籤, 分不夠沒法建立

這篇文件是用來顛覆那些過去在關係數據庫中建立無限分類的同窗的三觀的!
用圖來解決這種問題, 是否是很Easy!
因此, 選擇最合適的工具解決特定問題數據庫

還有: 目前在RDBMS中比較難處理的問題, 均可以在圖數據庫當中很輕巧的解決.函數

Neo4j 把數據存儲爲節點和關係, 屬性以鍵值對的形式存儲, 並鏈接到節點或者關係. 關係鏈接兩個節點, 而且關係是有類型和方向的.工具

關係能夠雙向遍歷. 關係類型是經過名稱來標識的.spa

數據模型

分類建模爲節點, 有公共的屬性: {id: 1, name: "名稱"}.插件

若是咱們須要跟蹤節點的生命週期, 還能夠在節點上增長 created_at, updated_at, deleted_at等屬性.

建立分類根和惟一約束code

CREATE (c:category_root {id: 1, name: "分類根"})
CREATE CONSTRAINT ON (c:category_root) ASSERT c.id IS UNIQUE

那麼,id就要求惟一了, 若是咱們再次執行 CREATE (c:category_root {id: 1, name: "分類根"}), 將會拋出下面的錯誤:orm

clipboard.png

添加子分類生命週期

CREATE (:category {id: 2, name: "食品"})
CREATE (:category {id: 3, name: "出版物"})
CREATE (:category {id: 4, name: "服裝"})

建立關係ip

MATCH (root:category_root {id: 1}), (c:category {name: "食品"}) CREATE (root)-[:children]->(c)
MATCH (root:category_root {id: 1}), (c:category {name: "出版物"}) CREATE (root)-[:children]->(c)
MATCH (root:category_root {id: 1}), (c:category {name: "服裝"}) CREATE (root)-[:children]->(c)

獲取分類信息樹(JSON)it

// 獲取分類樹的JSON返回
MATCH p = (root:category_root)-[r:children]->(c:category)  
WITH collect(p) AS paths 
CALL apoc.convert.toTree(paths) YIELD value
RETURN value

返回的結果爲

{
  "_type": "category_root",
  "name": "分類根",
  "_id": 21193,
  "id": 1,
  "children": [
    {
      "_type": "category",
      "name": "食品",
      "_id": 16121,
      "id": 2
    },
    {
      "_type": "category",
      "name": "服裝",
      "_id": 21174,
      "id": 3
    },
    {
      "_type": "category",
      "name": "出版物",
      "_id": 21175,
      "id": 4
    }
  ]
}

要作成下面這種樣子麼? 本身觸類旁通了!

clipboard.png

分類樹可視化

MATCH p = (root:category_root)-[r:children]->(c:category) RETURN p

clipboard.png

帶上時間戳

CREATE (c:category_root {id: 2, name: "分類根", create_at: timestamp(), updated_at: timestamp(), deleted_at: null})
MATCH (c:category_root {id: 2}) RETURN c;

clipboard.png

時間格式能夠用apoc.date.format函數來轉換

MATCH (c:category_root {id: 2, name: "分類根"}) 
RETURN apoc.date.format(c.create_at, "ms", "yyyy-MM-dd hh:mm:ss")

clipboard.png

依賴和工具

  • 本文使用 Neo4j Desktop
  • 須要安裝APOC插件
    clipboard.png
相關文章
相關標籤/搜索