NEO4J

Neo4j Desktop

https://neo4j.com/download/

图数据库

Neo4j是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。

图是一组节点和连接这些节点的关系。 在Neo4j中,节点和关系都可以包含属性。

  • 节点 Node
  • 关系 Relationship
    • 一个关系连接两个节点,必须有一个开始节点和结束节点。
    • 关系具有方向:单向和双向。
    • 关系可以将节点组织成任意的结构
  • 属性

    • 节点和关系都可以设置自己的属性。
    • 属性是用于表示数据的键值对。
    • 属性值是要么是原始值,要么是原始值类型的一个数组。
  • 遍历 Traversal

    • 进行数据库查询:通过一种算法,从一些开始节点开始查询与其关联的节点
  • 路径

    • 路径由至少一个节点,通过各种关系连接组成
    • 经常是作为一个查询或者遍历的结果。

为节点和关系建立索引:通过某一给定的属性值找到节点或者关系。

CQL

  • CREATE 创建节点、关系、标签

创建一个没有属性的节点

CREATE (<node-name>:<label-name>) --节点名:标签名,可有多个标签名

CREATE (emp:Employee)

创建具有属性的节点

CREATE (
  <node-name>:<label-name>
  {     
    <Property1-name>:<Property1-Value>
    ........
    <Propertyn-name>:<Propertyn-Value>
  }
)

CREATE (emp:Employee{id:123,name:"Lokesh"})

CREATE (:Person { name:'Tester',age:10 })

单个标签到关系

CREATE (<node1-name>:<label1-name>)-
    [<relationship-name>:<relationship-label-name>]
    ->(<node2-name>:<label2-name>)

CREATE (p1:Profile1)-[r1:LIKES]->(p2:Profile2)
  • MATCH 获取节点,关系和属性的数据
MATCH (n:Person { name:'Tester',age:10 }) RETURN n

-- where
MATCH (p:Person)
WHERE p.name = "Tester"
RETURN p

-- 返回部分属性
MATCH (dept: Dept)
RETURN dept.deptno,dept.dname
  • WHERE
WHERE emp.name = 'Abc' OR emp.name = 'Xyz'

MATCH (cust:Customer),(cc:CreditCard) 
WHERE cust.id = "1001" AND cc.id= "5001" 
CREATE (cust)-[r:DO_SHOPPING_WITH{shopdate:"12/12/2014",price:55000}]->(cc) 
RETURN r

Warning: This query builds a cartesian product between disconnected patterns.

笛卡尔积警告: 时间复杂度为(number of Foo nodes) x (number of Bar nodes)

created the index: uses a WITH clause to force the first MATCH clause to execute first, avoiding the cartesian product.

  • DELETE 删除节点、关系
DELETE <node-name-list> -- 用逗号分隔节点名

MATCH (e: Employee) DELETE e

MATCH (cc: CreditCard)-[rel]-(c:Customer) 
DELETE cc,c,rel
  • REMOVE 删除属性、标签
REMOVE <property-name-list>

MATCH (book { id:122 })
REMOVE book.price -- 删除属性
RETURN book

MATCH (m:Movie) 
REMOVE m:Picture -- 删除标签
  • SET 添加、更新属性
MATCH (book:Book)
SET book.title = 'superstar'
RETURN book
  • ORDER BY 排序
ORDER BY <property-name-list> [DESC] -- 默认升序ASC

match (c:Customer) return c ORDER BY c.id DESC
  • UNION 合并

Nestjs

npm install neo4j-driver nest-neo4j
// app.module.ts
import { Module } from '@nestjs/common';
import { Neo4jModule } from 'nest-neo4j';

@Module({
  imports: [
    Neo4jModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: () => ({
        scheme: 'neo4j',
        host: 'xxx.xxx.com', // 踩坑:不要带neo4j://
        port: 7687,
        username: process.env.DATABASE_N4_USERNAME,
        password: process.env.DATABASE_N4_PASSWORD,
        database: process.env.DATABASE_N4_DATABASE,
        config: {
          disableLosslessIntegers: true, 
        },
      }),
    }),
  ],
  controllers: [AppController],
  providers: [AppService]
})
export class AppModule {}

disableLosslessIntegers:Integer常量池—low,high限定范围。Enabling this option can result in a loss of precision and incorrect numeric values being returned if the database contains integer numbers outside of the range [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER].

import { Injectable } from '@nestjs/common';
import { Neo4jService } from 'nest-neo4j/dist';

@Injectable()
export class SupplyLaneService {
  constructor(private readonly neo4jService: Neo4jService) {}

  findAll() {
    return this.neo4jService
      .read(
        `
          match (src:xx) -[r:xx]->(dst:xx) return src,r,dst
        `,
      )
      .then((res) => {
        if (!res.records.length) return undefined;
        return res.records.map((record) => {
          src: record.get('src').properties,
          dst: record.get('dst').properties,
          lt: record.get('r').properties,
        });
      });
  }
}
Article
Tagcloud
DVA Java Express Architecture Azure CI/CD database ML AWS ETL nest sql AntV Next Deep Learning Flutter TypeScript Angular DevTools Microsoft egg Tableau SAP Token Regexp Unit test Nginx nodeJS sails wechat Jmeter HTML2Canvas Swift Jenkins JS event GTM Algorithm Echarts React-Admin Rest React hook Flux Redux ES6 Route Component Ref AJAX Form JSX Virtual Dom Javascript CSS design pattern