资讯专栏INFORMATION COLUMN

Neo4j: 信息分类建模

impig33 / 1145人阅读

摘要:麻烦创建一个标签分不够无法创建这篇文件是用来颠覆那些过去在关系数据库中创建无限分类的同学的三观的用图来解决这种问题是不是很所以选择最合适的工具解决特定问题还有目前在中比较难处理的问题都可以在图数据库当中很轻巧的解决把数据存储为节点和关系属性

麻烦创建一个 neo4j 标签, 分不够无法创建

这篇文件是用来颠覆那些过去在关系数据库中创建无限分类的同学的三观的!
用图来解决这种问题, 是不是很Easy!
所以, 选择最合适的工具解决特定问题

还有: 目前在RDBMS中比较难处理的问题, 都可以在图数据库当中很轻巧的解决.

Neo4j 把数据存储为节点和关系, 属性以键值对的形式存储, 并连接到节点或者关系. 关系连接两个节点, 并且关系是有类型和方向的.

关系可以双向遍历. 关系类型是通过名称来标识的.

数据模型

分类建模为节点, 有公共的属性: {id: 1, name: "名称"}.

如果我们需要跟踪节点的生命周期, 还可以在节点上增加created_at, updated_at, deleted_at等属性.

创建分类根和唯一约束

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: "分类根"}), 将会抛出下面的错误:

添加子分类

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

创建关系

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)

// 获取分类树的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
    }
  ]
}

要做成下面这种样子么? 自己举一反三了!

分类树可视化

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

带上时间戳

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

时间格式可以用apoc.date.format函数来转换

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

依赖和工具

本文使用 Neo4j Desktop

需要安装APOC插件

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68350.html

相关文章

  • 在选择数据库的路上,我们遇到过哪些坑?(2)

    摘要:有关进行调用的进一步危害,请观看这段有关安全漏洞的讨论。索引索引基本上会复制数据库中的信息片段,这样有利于它迅速找到节点。不管怎样,它都能事务性地依次通过数据库中的所有节点。 【编者按】你会怎么选择数据库,是关系数据库、XML 数据库、资源描述框架(RDF),还是图形数据库?本文的第1部分深入而生动地探讨了各种选择。在第2部分,将深入介绍使用 Neo4j 的注意点。文章系国内 ITOM...

    lavnFan 评论0 收藏0
  • 在选择数据库的路上,我们遇到过哪些坑?(1)

    摘要:资源描述框架三元组存储为了解决问题,把我们的所有文档从迁移到资源描述框架,这一框架又被称为三元组存储。下面这些资源描述框架的三元组可以体现这一示意图我们的数据库确实很给力,总体来说我们也相当满意。 【编者按】你会怎么选择数据库,是关系数据库、XML 数据库、资源描述框架(RDF),还是图形数据库?这篇演讲深入而生动地探讨了各种选择。本文系国内 ITOM 管理平台 OneAPM 编译呈现...

    n7then 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<