Overview Defining a Model Instances Creating Nodes and Relationships Merging Nodes and Relationships Updating Nodes and Relationships Deleting Nodes Deleting Relationships Finding Nodes and Relationships Hooks Temporary Databases
The QueryBuilder
class also provides some helpers for generating strings which could be used in a statement.
QueryBuilder.getNormalizedLabels
returns a single string to be used in a query.
1linkconst { getNormalizedLabels } = QueryBuilder;
2link
3linkconsole.log(getNormalizedLabels('Users')); // `Users`
4link
5linkconsole.log(getNormalizedLabels('Important Users')); // "`Important Users`"
6link
7linkconsole.log(getNormalizedLabels(['Users', 'Active'])); // "`Users:Active`"
8link
9linkconsole.log(getNormalizedLabels(['Users', 'Active'], 'or')); // "`Users|Active`"
10link
11linkconsole.log(getNormalizedLabels(['Users', 'Active', 'Old'])); // "`Users:Active:Old`"
QueryBuilder.getNodeStatement
returns a string for a node's identifier, label, and inner info (like a where), to be used in a query.
Every parameter is optional.
1linkconst { getNodeStatement } = QueryBuilder;
2link
3linkconsole.log(getNodeStatement({
4link identifier: 'n',
5link label: 'MyLabel'
6link})); // (n:MyLabel)
7link
8linkconsole.log(getNodeStatement({
9link identifier: 'n',
10link})); // (n)
11link
12linkconsole.log(getNodeStatement({
13link label: 'MyLabel',
14link})); // (:MyLabel)
15link
16linkconsole.log(getNodeStatement({})); // ()
17link
18link// --> an inner statement can be given
19linkconsole.log(getNodeStatement({
20link identifier: 'n',
21link label: 'MyLabel'
22link inner: '{ id: 1 }' // --> using a literal string as inner
23link})); // (n:MyLabel { id: 1 })
24link
25link/* --> using a Where instance as inner */
26linkconst where = new Where({ id: 1 });
27linkconsole.log(getNodeStatement({
28link identifier: 'n',
29link label: 'MyLabel'
30link inner: where
31link})); // (n:MyLabel { id: $id })
32linkconsole.log(where.getBindParam().get()); // { id: 1 }
33link
34link/* --> using a BindParam and a properties object instance as inner */
35linkconst bindParam = new BindParam();
36linkconsole.log(getNodeStatement({
37link identifier: 'n',
38link label: 'MyLabel'
39link inner: {
40link properties: {
41link id: 1,
42link },
43link bindParam: bindParam
44link }
45link})); // (n:MyLabel { id: $id })
46linkconsole.log(bindParam().get()); // { id: 1 }
QueryBuilder.getRelationshipStatement
returns a string for a relationship's direction, name, and inner info (like a where), to be used in a query.
1linkconst { getRelationshipStatement } = QueryBuilder;
2link
3linkconsole.log(getRelationshipStatement({
4link direction: 'out',
5link name: 'HAS',
6link identifier: 'r'
7link})); // -[r:HAS]->
8link
9linkconsole.log(getRelationshipStatement({
10link direction: 'in',
11link name: 'HAS',
12link identifier: 'r'
13link})); // <-[r:HAS]-
14link
15linkconsole.log(getRelationshipStatement({
16link direction: 'none',
17link name: 'HAS',
18link identifier: 'r'
19link})); // -[r:HAS]-
20link
21linkconsole.log(getRelationshipStatement({
22link direction: 'out',
23link name: 'HAS',
24link // --> in any of the above cases, the identifier can be skipped
25link})); // -[:HAS]->
26link
27link// --> an inner statement can be given
28linkconsole.log(getRelationshipStatement({
29link direction: 'out',
30link name: 'HAS',
31link identifier: 'r',
32link inner: '{ id: 1 }' // --> using a literal string as inner
33link})); // -[r:HAS { id: 1}]->
34link
35link/* --> using a Where instance as inner */
36linkconst where = new Where({ id: 1 });
37linkconsole.log(getRelationshipStatement({
38link direction: 'out',
39link name: 'HAS',
40link identifier: 'r',
41link inner: where
42link})); // -[r:HAS { id: $id }]->
43linkconsole.log(where.getBindParam().get()); // { id: 1 }
44link
45link/* --> using a BindParam and a properties object instance as inner */
46linkconst bindParam = new BindParam();
47linkconsole.log(getRelationshipStatement({
48link direction: 'out',
49link name: 'HAS',
50link identifier: 'r',
51link inner: {
52link properties: {
53link id: 1,
54link },
55link bindParam: bindParam
56link }
57link})); // -[r:HAS { id: $id }]->
58linkconsole.log(bindParam.get()); // { id: 1 }
QueryBuilder.getIdentifierWithLabel
returns a string to be used in a query, regardless if any of the identifier or label are null
1linkconst { getIdentifierWithLabel } = QueryBuilder;
2link
3linkconsole.log(getIdentifierWithLabel('MyIdentifier', 'MyLabel')); // "MyIdentifier:MyLabel"
4link
5linkconsole.log(getIdentifierWithLabel('MyIdentifier', 'MyLabel')); // "MyIdentifier"
6link
7linkconsole.log(getIdentifierWithLabel('MyIdentifier', 'MyLabel')); // ":MyLabel"
QueryBuilder.getSetParts
returns the parts and the statement for a SET operation.
1linkconst { getSetParts } = QueryBuilder;
2link
3linkconst existingBindParam = new BindParam({});
4linkconst result = getSetParts({
5link /* --> the data to set */
6link data: {
7link x: 5,
8link y: 'foo'
9link },
10link /* --> BindParam instance to be used */
11link bindParam: existingBindParam, // @see [Bind Paramters](../Bind-Parameters)
12link /* --> the identifier to use */
13link identifier: 'node'
14link});
15linkconsole.log(result.parts); // ["node.x = $x", "node.y = $y"]
16linkconsole.log(result.statement); // "SET node.x = $x, node.y = $y"
17linkconsole.log(bindParam.get()); // { x: 5, y: 'foo' }
18link
19linkconst existingBindParam = new BindParam({
20link x: 'irrelevant'
21link});
22linkconst result = getSetParts({
23link data: {
24link x: 5,
25link y: 'foo'
26link },
27link bindParam: existingBindParam,
28link identifier: 'node'
29link});
30linkconsole.log(result.parts); // ["node.x = $x__aaaa", "node.y = $y"]
31linkconsole.log(result.statement); // "SET node.x = $x__aaaa, node.y = $y"
32linkconsole.log(bindParam.get()); // { x: 'irrelevant', x_aaaa: 5, y: 'foo' }
QueryBuilder
exposes a getPropertiesWithParams
function which returns an object in a string format to be used in queries, while replacing its values with bind params.
1link/* --> an existing BindParam instance, could have existing values */
2linkconst bindParam = new BindParam({
3link x: 4,
4link});
5linkconst result = QueryBuilder.getPropertiesWithParams(
6link /* --> the object to use */
7link {
8link x: 5,
9link y: 'foo'
10link },
11link /* --> an existing bindParam must be passed */
12link bindParam
13link);
14link
15link/* --> the result gives us the needed object, while replacing its values with the appropriate bind param */
16linkconsole.log(result); // "{ x: $x__aaaa, y: $y }"
17linkconsole.log(bindParam.get()); // { x: 4, x__aaaa: 5, y: 'foo' }
1linkconst onlyMinHops = QueryBuilder.getVariableLengthRelationshipString({
2link minHops: 3,
3link});
4linkconsole.log(onlyMinHops); // "*3.."
5link
6linkconst onlyMaxHops = QueryBuilder.getVariableLengthRelationshipString({
7link maxHops: 5,
8link});
9linkconsole.log(onlyMaxHops); // "*5.."
10link
11linkconst bothHops = QueryBuilder.getVariableLengthRelationshipString({
12link minHops: 3,
13link maxHops: 5,
14link});
15linkconsole.log(bothHops); // "*3..5"
16link
17linkconst equalHops = QueryBuilder.getVariableLengthRelationshipString({
18link minHops: 5,
19link maxHops: 5,
20link});
21linkconsole.log(equalHops); // "*5*"
22link
23linkconst ifiniteHops = QueryBuilder.getVariableLengthRelationshipString({
24link maxHops: Infinity,
25link});
26linkconsole.log(ifiniteHops); // "*"