使用 Neo4j 和 JavaScript 构建应用程序
Neo4j JavaScript 驱动程序是用于通过 JavaScript 应用程序与 Neo4j 实例交互的官方库。
Neo4j 的核心是 Cypher,它是用于与 Neo4j 数据库交互的查询语言。虽然本指南不要求您成为经验丰富的 Cypher 查询者,但如果您已经了解一些 Cypher,将更容易专注于 JavaScript 特定的部分。因此,尽管本指南在过程中也提供了对 Cypher 的温和介绍,但如果这是您第一次接触,请考虑查阅 入门 → Cypher,以获取更详细的图数据库建模和查询指南。然后,您可以按照本指南开发您的 JavaScript 应用程序时应用这些知识。
连接到数据库
通过创建 Driver 对象并提供 URL 和身份验证令牌来连接到数据库。一旦您有了 Driver
实例,使用 .getServerInfo()
方法确保可以建立一个正常工作的连接。
var neo4j = require('neo4j-driver');
(async () => {
// URI examples: 'neo4j://localhost', 'neo4j+s://xxx.databases.neo4j.io'
const URI = '{neo4j-database-uri}'
const USER = '{neo4j-username}'
const PASSWORD = '{neo4j-password}'
let driver
try {
driver = neo4j.driver(URI, neo4j.auth.basic(USER, PASSWORD))
const serverInfo = await driver.getServerInfo()
console.log('Connection established')
console.log(serverInfo)
} catch(err) {
console.log(`Connection error\n${err}\nCause: ${err.cause}`)
}
})();
创建示例图
使用 Driver.executeQuery()
方法运行 Cypher 查询。不要硬编码或连接参数:使用占位符并将参数指定为键值对。
Person
节点并在它们之间建立 KNOWS
关系let { records, summary } = await driver.executeQuery(`
CREATE (a:Person {name: $name})
CREATE (b:Person {name: $friendName})
CREATE (a)-[:KNOWS]->(b)
`,
{ name: 'Alice', friendName: 'David' },
{ database: 'neo4j' }
)
console.log(
`Created ${summary.counters.updates().nodesCreated} nodes ` +
`in ${summary.resultAvailableAfter} ms.`
)
查询图
要从数据库中检索信息,请使用 Cypher 子句 MATCH
Person
的 Person
节点let { records, summary } = await driver.executeQuery(`
MATCH (p:Person)-[:KNOWS]->(:Person)
RETURN p.name AS name
`,
{},
{ database: 'neo4j' }
)
// Loop through users and do something with them
for(let record of records) {
console.log(`Person with name: ${record.get('name')}`)
console.log(`Available properties for this node are: ${record.keys}\n`)
}
// Summary information
console.log(
`The query \`${summary.query.text}\` ` +
`returned ${records.length} nodes.\n`
)
关闭连接和会话
当您使用完毕 Driver
实例时,调用其 .close()
方法以释放其仍占用的任何资源。同样适用于任何开放的会话。
const driver = neo4j.driver(URI, neo4j.auth.basic(USER, PASSWORD))
let session = driver.session({ database: 'neo4j' })
// session/driver usage
session.close()
driver.close()
词汇表
- LTS
-
长期支持版本是保证支持多年的版本。Neo4j 4.4 是 LTS 版本,Neo4j 5 也将有 LTS 版本。
- Aura
-
Aura 是 Neo4j 的完全托管云服务。它提供免费和付费计划。
- Cypher
-
Cypher 是 Neo4j 的图查询语言,可让您从数据库中检索数据。它类似于 SQL,但专用于图。
- APOC
-
Awesome Procedures On Cypher (APOC) 是一个(许多)函数库,这些函数本身无法在 Cypher 中轻松表达。
- Bolt
-
Bolt 是 Neo4j 实例和驱动程序之间交互所使用的协议。默认情况下,它侦听端口 7687。
- ACID
-
原子性、一致性、隔离性、持久性 (ACID) 是保证数据库事务可靠处理的属性。符合 ACID 的 DBMS 确保数据库中的数据在发生故障时仍保持准确和一致。
- 最终一致性
-
如果数据库保证所有集群成员在某个时间点都将存储最新版本的数据,则该数据库是最终一致的。
- 因果一致性
-
如果读写查询被集群的每个成员以相同的顺序看到,则数据库是因果一致的。这比最终一致性更强。
- NULL
-
空标记不是一种类型,而是值缺失的占位符。有关更多信息,请参阅 Cypher → 使用
null
。 - 事务
-
事务是一个工作单元,它要么被完整地提交,要么在失败时被回滚。一个例子是银行转账:它涉及多个步骤,但这些步骤必须全部成功或被撤销,以避免钱从一个账户中扣除但未添加到另一个账户。
- 反压
-
反压是阻碍数据流动的力。它确保客户端不会被其处理速度更快的数据所淹没。
- 事务函数
-
事务函数是由
executeRead
或executeWrite
调用执行的回调。在服务器故障时,驱动程序会自动重新执行该回调。 - Driver
-
一个
Driver
对象包含与 Neo4j 数据库建立连接所需的详细信息。