View Source Ex4j (Ex4j v0.1.0)

Combine the power of Ecto with the Bolt protocol + an elegant DSL for Neo4J databases.

Settings

Add the dependency:

def deps do
  [
    {:ex4j, "~> 0.1.0"}
  ]
end

Add the configuration:

config :ex4j, Bolt,
  url: "bolt://localhost:7687",
  basic_auth: [username: "neo4j", password: "zEb0zryxK62NNRXKWxJKd7qeEFkO3mLIgcGwuUA4lvg"],
  pool_size: 10,
  ssl: false

Examples

defmodule Node.User do
  use Ex4j.Node

  graph do
    field(:name, :string)
    field(:age, :integer)
    field(:email, :string)
  end
end

defmodule Node.Has do
  use Ex4j.Node

  graph do
    field(:date, :utc_datetime)
  end
end

defmodule Node.Comment do
  use Ex4j.Node

  graph do
    field(:content, :string)
  end
end

defmodule App do
  use Ex4j.Cypher

  alias Node.{User, Has, Comment}

  def execute do
    User
    |> match(as: :user)
    |> vertex(Comment, as: :comment)
    |> edge(Has, as: :has, from: :user, to: :comment, type: :out)
    |> where(:user, "user.name = 'Tiago' OR user.age IN [1,2,3]")
    |> where(:comment, "comment.content CONTAINS 'Article'")
    |> where(:has, "has.date > date('2019-09-30')")
    |> return(:user)
    |> return(:has)
    |> return(:comment)
    |> run()
  end
end

Cypher

MATCH (user:User WHERE user.name = 'Tiago' OR user.age IN [1,2,3])-[has:Has WHERE has.date > date('2019-09-30')]->(comment:Comment WHERE comment.content CONTAINS 'Article')
RETURN user, has, comment