Neo4Jを使って評価してみる話が出たので、とりあえず動かしてみるまのでメモ。
docker-compose
version: '3'
services:
neo4j:
container_name: neo4j
image: neo4j
ports:
- 7474:7474
- 7687:7687
environment:
- NEO4J_AUTH=neo4j/neo4jpasswprd
volumes:
- ~/neo4j/data:/data
- ~/neo4j/logs:/logs
- ~/neo4j/conf:/conf
- NEO4J_AUTHはNeo4Jの管理画面や後述のneo4j-driverでベーシック認証を行うときのユーザー名とパスワード
- volumesはデータなどの格納先
- portsで指定しているのは以下の通りのようだ
- 7474: 管理画面のポート
- 7687: Neo4JにAPIアクセスするためのポート
TypeScriptからのアクセス
neo4j-driverを使う。これにはTypeScript用の型定義も含まれている。
yarn add neo4j-driver
接続
const driver = neo4j.driver(
'neo4j://localhost:7687',
neo4j.auth.basic('neo4j', 'neo4jpasswprd')
)
ここではベーシック認証を使っているが、他の認証方式はまたの機会に。
書き込み
const node = { id: 'foobar', name: 'John Doe'}
driver.session().executeWrite(tx => {
tx.run('MERGE (n: TestNode { id: $id, name: $name })', node)
})
読み込み
const ret = await driver.session().executeRead(async tx => {
const result = await tx.run('MATCH (n: TestNode) RETURN n')
return result.records.map(r => {
return {
id: r.get('n').properties.id,
name: r.get('n').properties.name
}
})
})
Neo4JはCypherで操作を行うので、アプリケーションを書く上ではCypher言語に習熟すれば良いようだ。