Documentation
¶
Index ¶
- func New(expr func(scope query.Scope, b *strings.Builder)) neogo.Expression
- type Client
- type Querier
- func Create(pattern internal.Patterns) *Querier
- func Cypher(query string) *Querier
- func Delete(identifiers ...query.PropertyIdentifier) *Querier
- func DetachDelete(identifiers ...query.PropertyIdentifier) *Querier
- func ForEach(identifier query.Identifier, inValue query.ValueIdentifier, ...) *Querier
- func Match(pattern internal.Patterns) *Querier
- func Merge(pattern internal.Pattern, opts ...internal.MergeOption) *Querier
- func OptionalMatch(pattern internal.Patterns) *Querier
- func Remove(items ...internal.RemoveItem) *Querier
- func Set(items ...internal.SetItem) *Querier
- func Subquery(subquery func(c *Client) Runner) *Querier
- func Union(unions ...func(*Client) Runner) *Querier
- func UnionAll(unions ...func(*Client) Runner) *Querier
- func Unwind(identifier query.Identifier, as string) *Querier
- func Use(graphExpr string) *Querier
- func Where(opts ...internal.WhereOption) *Querier
- func With(identifiers ...query.Identifier) *Querier
- func Yield(identifiers ...query.Identifier) *Querier
- type Reader
- func (e *Reader) Call(procedure string) *Yielder
- func (e *Reader) Cypher(query string) *Querier
- func (e *Reader) Eval(expression neogo.Expression) *Querier
- func (e *Reader) Match(pattern internal.Patterns) *Querier
- func (e *Reader) OptionalMatch(pattern internal.Patterns) *Querier
- func (e *Reader) Return(identifiers ...query.Identifier) Runner
- func (e *Reader) Show(command string) *Yielder
- func (e *Reader) Subquery(subquery func(c *Client) Runner) *Querier
- func (e *Reader) Unwind(identifier query.Identifier, as string) *Querier
- func (e *Reader) With(identifiers ...query.Identifier) *Querier
- type Runner
- type Updater
- func (c Updater) Compile(s query.Scope, b *strings.Builder)
- func (e *Updater[To, CypherTo]) Create(pattern internal.Patterns) To
- func (e *Updater[To, CypherTo]) Delete(identifiers ...query.Identifier) To
- func (e *Updater[To, CypherTo]) DetachDelete(identifiers ...query.PropertyIdentifier) To
- func (e *Updater[To, CypherTo]) ForEach(identifier query.Identifier, inValue query.ValueIdentifier, ...) To
- func (e *Updater[To, CypherTo]) Merge(pattern internal.Pattern, opts ...internal.MergeOption) To
- func (c Updater) Print()
- func (e *Updater[To, CypherTo]) Remove(items ...internal.RemoveItem) To
- func (e *Updater[To, CypherTo]) Set(items ...internal.SetItem) To
- type Yielder
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
Types ¶
type Client ¶
type Client struct { *Reader *Updater[*Querier, *internal.CypherQuerier] // contains filtered or unexported fields }
type Querier ¶
type Querier struct { *Reader *Updater[*Querier, *internal.CypherQuerier] Runner // contains filtered or unexported fields }
func Create ¶
Example ¶
var p any Create(db.Path( db.Node(db.Var(tests.Person{}, db.Props{"name": "'Andy'"})). To(tests.WorksAt{}, db.Var(tests.Company{}, db.Props{"name": "'Neo4j'"})). From(tests.WorksAt{}, db.Var(tests.Person{}, db.Props{"name": "'Michael'"})), "p", )). Return(db.Qual(&p, "p")). Print()
Output: CREATE p = (:Person {name: 'Andy'})-[:WORKS_AT]->(:Company {name: 'Neo4j'})<-[:WORKS_AT]-(:Person {name: 'Michael'}) RETURN p
func Cypher ¶
Example ¶
var n any Match(db.Node(db.Qual(&n, "n"))). Cypher(`WHERE n.name = 'Bob'`). Return(&n). Print()
Output: MATCH (n) WHERE n.name = 'Bob' RETURN n
func Delete ¶
func Delete(identifiers ...query.PropertyIdentifier) *Querier
Example ¶
var ( n tests.Person r tests.ActedIn ) Match( db.Node(db.Qual(&n, "n", db.Props{"name": "'Laurence Fishburne'"})). To(db.Qual(&r, "r"), nil), ). Delete(&r). Print()
Output: MATCH (n:Person {name: 'Laurence Fishburne'})-[r:ACTED_IN]->() DELETE r
func DetachDelete ¶
func DetachDelete(identifiers ...query.PropertyIdentifier) *Querier
Example ¶
var n tests.Person Match( db.Node( db.Qual(&n, "n", db.Props{"name": "'Carrie-Anne Moss'"}, ), ), ). DetachDelete(&n). Print()
Output: MATCH (n:Person {name: 'Carrie-Anne Moss'}) DETACH DELETE n
func ForEach ¶
func ForEach(identifier query.Identifier, inValue query.ValueIdentifier, do func(c *Updater[any, any])) *Querier
Example ¶
Match( db.Path(db.Node("start").To(db.Var(nil, db.VarLength("*")), "finish"), "p"), ). Where(db.And( db.Cond("start.name", "=", "'A'"), db.Cond("finish.name", "=", "'D'"), )). ForEach("n", "nodes(p)", func(c *Updater[any, any]) { c.Set(db.SetPropValue("n.marked", true)) }). Print()
Output: MATCH p = (start)-[*]->(finish) WHERE start.name = 'A' AND finish.name = 'D' FOREACH (n IN nodes(p) | SET n.marked = true)
func Match ¶
Example ¶
var m tests.Movie Match( db.Node(db.Var( tests.Person{}, db.Props{ "name": "'Oliver Stone'", }, )).To(nil, db.Var("movie")), ). Return(db.Qual( &m.Title, "movie.title", )).Print()
Output: MATCH (:Person {name: 'Oliver Stone'})-->(movie) RETURN movie.title
func Merge ¶
func Merge(pattern internal.Pattern, opts ...internal.MergeOption) *Querier
Example ¶
var person tests.Person Merge( db.Node(db.Qual(&person, "person")), db.OnMatch( db.SetPropValue(&person.Found, true), db.SetPropValue(&person.LastSeen, "timestamp()"), ), ). Return(&person.Name, &person.Found, &person.LastSeen). Print()
Output: MERGE (person:Person) ON MATCH SET person.found = true, person.lastSeen = timestamp() RETURN person.name, person.found, person.lastSeen
func OptionalMatch ¶
Example ¶
a := tests.Person{} r := tests.Directed{} Match( db.Node(db.Qual( &a, "a", db.Props{ "name": "'Martin Sheen'", }, )), ). OptionalMatch( db.Node(&a).To(db.Qual(&r, "r"), nil), ).Return(&a.Name, &r).Print()
Output: MATCH (a:Person {name: 'Martin Sheen'}) OPTIONAL MATCH (a)-[r:DIRECTED]->() RETURN a.name, r
func Remove ¶
func Remove(items ...internal.RemoveItem) *Querier
Example ¶
var n tests.Person var labels []string Match(db.Node(db.Qual(&n, "n", db.Props{"name": "'Peter'"}))). Remove(db.RemoveLabels(&n, "German", "Swedish")). Return(&n.Name, db.Qual(&labels, "labels(n)")). Print()
Output: MATCH (n:Person {name: 'Peter'}) REMOVE n:German:Swedish RETURN n.name, labels(n)
func Set ¶
Example ¶
var n tests.Person Match( db.Node(db.Qual(&n, "n", db.Props{"name": "'Andy'"})), ). Set( db.SetPropValue(&n.Position, "'Developer'"), db.SetPropValue(&n.Surname, "'Taylor'"), ). Print()
Output: MATCH (n:Person {name: 'Andy'}) SET n.position = 'Developer', n.surname = 'Taylor'
func Subquery ¶
Example ¶
var ( p tests.Person numConn int ) Match(db.Node(db.Qual(&p, "p"))). Subquery(func(c *Client) Runner { return c.With(&p). Match(db.Node(&p).Related(nil, db.Var("c"))). Return( db.Qual(&numConn, "count(c)", db.Name("numberOfConnections")), ) }). Return(&p.Name, &numConn). Print()
Output: MATCH (p:Person) CALL { WITH p MATCH (p)--(c) RETURN count(c) AS numberOfConnections } RETURN p.name, numberOfConnections
func Union ¶
Example ¶
var name string Union( func(c *Client) Runner { return c. Match(db.Node(db.Var("n", db.Label("Person")))). Return(db.Qual(&name, "n.name", db.Name("name"))) }, func(c *Client) Runner { return c. Match(db.Node(db.Var("n", db.Label("Movie")))). Return(db.Qual(&name, "n.title", db.Name("name"))) }, ).Print()
Output: MATCH (n:Person) RETURN n.name AS name UNION MATCH (n:Movie) RETURN n.title AS name
func UnionAll ¶
Example ¶
var name string UnionAll( func(c *Client) Runner { return c. Match(db.Node(db.Var("n", db.Label("Person")))). Return(db.Qual(&name, "n.name", db.Name("name"))) }, func(c *Client) Runner { return c. Match(db.Node(db.Var("n", db.Label("Movie")))). Return(db.Qual(&name, "n.title", db.Name("name"))) }, ).Print()
Output: MATCH (n:Person) RETURN n.name AS name UNION ALL MATCH (n:Movie) RETURN n.title AS name
func Unwind ¶
func Unwind(identifier query.Identifier, as string) *Querier
Example ¶
events := map[string]any{ "events": []map[string]any{ { "id": 1, "year": 2014, }, { "id": 2, "year": 2015, }, }, } type Year struct { internal.Node `neo4j:"Year"` Year int `json:"year"` } type Event struct { internal.Node `neo4j:"Event"` ID int `json:"id"` Year int `json:"year"` } type In struct { internal.Relationship `neo4j:"IN"` } var ( y Year e Event ) Unwind(db.Qual(&events, "events"), "event"). Merge( db.Node(db.Qual(&y, "y", db.Props{"year": "event.year"})), ). Merge( db.Node(&y). From(In{}, db.Qual(&e, "e", db.Props{"id": "event.id"})), ). Return(db.Return(db.Qual(&e.ID, "x"), db.OrderBy("", true))). Print()
Output: UNWIND $events AS event MERGE (y:Year {year: event.year}) MERGE (y)<-[:IN]-(e:Event {id: event.id}) RETURN e.id AS x ORDER BY x
func Use ¶
Example ¶
var n any Use("myDatabase"). Match(db.Node(db.Qual(&n, "n"))). Return("n"). Print()
Output: USE myDatabase MATCH (n) RETURN n
func Where ¶
func Where(opts ...internal.WhereOption) *Querier
Example ¶
var n tests.Person Match(db.Node(db.Qual(&n, "n"))). Where( db.Or( db.Xor( db.Cond(&n.Name, "=", "'Peter'"), db.And( db.Cond(&n.Age, "<", "30"), db.Cond(&n.Name, "=", "'Timothy'"), ), ), db.Not(db.Or( db.Cond(&n.Name, "=", "'Timothy'"), db.Cond(&n.Name, "=", "'Peter'"), )), ), ). Return( db.Return(db.Qual(&n.Name, "name"), db.OrderBy("", true)), db.Qual(&n.Age, "age"), ).Print()
Output: MATCH (n:Person) WHERE (n.name = 'Peter' XOR (n.age < 30 AND n.name = 'Timothy')) OR NOT (n.name = 'Timothy' OR n.name = 'Peter') RETURN n.name AS name, n.age AS age ORDER BY name
func With ¶
func With(identifiers ...query.Identifier) *Querier
Example ¶
var names []string Match( db.Node(db.Var("n", db.Props{"name": "'Anders'"})). Related(nil, "m"), ). With( db.With("m", db.OrderBy("name", false), db.Limit("1")), ). Match(db.Node("m").Related(nil, "o")). Return(db.Qual(names, "o.name")).Print()
Output: MATCH (n {name: 'Anders'})--(m) WITH m ORDER BY m.name DESC LIMIT 1 MATCH (m)--(o) RETURN o.name
type Runner ¶
type Runner interface { neogo.Expression Print() // contains filtered or unexported methods }
func Return ¶
func Return(identifiers ...query.Identifier) Runner
Example ¶
var p tests.Person Match(db.Node(db.Qual(&p, "p", db.Props{"name": "'Keanu Reeves'"}))). Return(db.Qual(&p.Nationality, "citizenship")).Print()
Output: MATCH (p:Person {name: 'Keanu Reeves'}) RETURN p.nationality AS citizenship
type Updater ¶
type Updater[To any, ToCypher any] struct { To func(ToCypher) To // contains filtered or unexported fields }
func (*Updater[To, CypherTo]) Delete ¶
func (e *Updater[To, CypherTo]) Delete(identifiers ...query.Identifier) To
func (*Updater[To, CypherTo]) DetachDelete ¶
func (e *Updater[To, CypherTo]) DetachDelete(identifiers ...query.PropertyIdentifier) To
func (*Updater[To, CypherTo]) ForEach ¶
func (e *Updater[To, CypherTo]) ForEach(identifier query.Identifier, inValue query.ValueIdentifier, do func(c *Updater[any, any])) To
func (*Updater[To, CypherTo]) Merge ¶
func (e *Updater[To, CypherTo]) Merge(pattern internal.Pattern, opts ...internal.MergeOption) To
func (*Updater[To, CypherTo]) Remove ¶
func (e *Updater[To, CypherTo]) Remove(items ...internal.RemoveItem) To
type Yielder ¶
func Call ¶
Example ¶
var labels []string Call("db.labels()"). Yield(db.Qual(&labels, "label")). Return(&labels). Print()
Output: CALL db.labels() YIELD label RETURN label
Click to show internal directories.
Click to hide internal directories.