国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

neo4j查詢語(yǔ)言Cypher詳解(二)--Pattern和類型

這篇具有很好參考價(jià)值的文章主要介紹了neo4j查詢語(yǔ)言Cypher詳解(二)--Pattern和類型。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Patterns

圖形模式匹配是Cypher的核心。它是一種用于通過(guò)應(yīng)用聲明性模式從圖中導(dǎo)航、描述和提取數(shù)據(jù)的機(jī)制。在MATCH子句中,可以使用圖模式定義要搜索的數(shù)據(jù)和要返回的數(shù)據(jù)。圖模式匹配也可以在不使用MATCH子句的情況下在EXISTS、COUNT和COLLECT子查詢中使用。

圖模式使用類似于在白板上繪制屬性圖的節(jié)點(diǎn)和關(guān)系的語(yǔ)法來(lái)描述數(shù)據(jù)。在白板上,節(jié)點(diǎn)繪制為圓圈,關(guān)系繪制為箭頭。Cypher將圓圈表示為一對(duì)括號(hào),箭頭表示為破折號(hào)和大于或小于符號(hào): ()-->()<--()

這些節(jié)點(diǎn)和關(guān)系的簡(jiǎn)單模式構(gòu)成了路徑模式的構(gòu)建塊,可以匹配固定長(zhǎng)度的路徑。除了討論簡(jiǎn)單的模式外,本章還將介紹更復(fù)雜的模式,展示如何匹配可變長(zhǎng)度的模式,內(nèi)聯(lián)過(guò)濾器以提高查詢性能,以及如何向路徑模式添加循環(huán)非線性形狀。

概念

Node patterns

每個(gè)圖模式至少包含一個(gè)節(jié)點(diǎn)模式。最簡(jiǎn)單的圖形模式是單個(gè)空節(jié)點(diǎn)模式: MATCH ()

空節(jié)點(diǎn)模式匹配屬性圖中的每個(gè)節(jié)點(diǎn)。為了獲得對(duì)匹配節(jié)點(diǎn)的引用,需要在node模式中聲明一個(gè)變量: MATCH (n)

通過(guò)這個(gè)變量引用,可以訪問(wèn)節(jié)點(diǎn):MATCH (n) RETURN n.name

向節(jié)點(diǎn)模式添加Label表達(dá)式意味著只返回具有匹配標(biāo)簽的節(jié)點(diǎn)。MATCH (n:Stop)

更復(fù)雜模式:MATCH (n:(TrainStation&BusStation)|StationGroup)

屬性名稱和值的映射可用于基于與指定值的相等性來(lái)匹配節(jié)點(diǎn)屬性。MATCH (n { mode: 'Rail' })

更一般的謂詞可以用WHERE子句表示。MATCH (n:Station WHERE n.name STARTS WITH 'Preston')

Relationship patterns

最簡(jiǎn)單的關(guān)系模式: --。此模式匹配任何方向的關(guān)系,并且不過(guò)濾任何關(guān)系類型或?qū)傩?。與節(jié)點(diǎn)模式不同,關(guān)系模式不能在兩端沒(méi)有節(jié)點(diǎn)模式的MATCH子句中使用。

為了獲得對(duì)模式匹配的關(guān)系的引用,需要在模式中聲明一個(gè)關(guān)系變量,方法是在破折號(hào)之間的方括號(hào)中添加變量名:-[r]-

為了匹配特定的方向,在左側(cè)或右側(cè)分別加上<>: -[r]->

若要匹配關(guān)系類型,在冒號(hào)后添加類型名稱: -[:CALLS_AT]->

與節(jié)點(diǎn)模式類似,可以添加屬性名稱和值的映射,以基于與指定值的相等性來(lái)過(guò)濾關(guān)系的屬性: -[{ distance: 0.24, duration: 'PT4M' }]->。WHERE子句可以用于更一般的謂詞: -[r WHERE time() + duration(r.duration) < time('22:00') ]->

Path patterns

任何有效的路徑都以一個(gè)節(jié)點(diǎn)開(kāi)始和結(jié)束,每個(gè)節(jié)點(diǎn)之間都有關(guān)系(如果有多個(gè)節(jié)點(diǎn))。路徑模式具有相同的限制,對(duì)于所有有效的路徑模式,以下條件為真:

  • 它們至少有一個(gè)節(jié)點(diǎn)模式。

  • 它們以節(jié)點(diǎn)模式開(kāi)始和結(jié)束。

  • 它們?cè)诠?jié)點(diǎn)和關(guān)系之間交替。

這些都是有效的路徑模式:

()
(s)--(e)
(:Station)--()<--(m WHERE m.departs > time('12:00'))-->()-[:NEXT]->(n)

無(wú)效路徑模式:

-->					//無(wú)節(jié)點(diǎn)
()-->				//尾部沒(méi)有節(jié)點(diǎn)
()-->-->()			//節(jié)點(diǎn)和關(guān)系之間無(wú)交替

路徑模式匹配

Equijoins

等量連接是一種對(duì)路徑的操作,它要求多個(gè)節(jié)點(diǎn)或路徑之間的關(guān)系相同。通過(guò)在多個(gè)節(jié)點(diǎn)模式或關(guān)系模式中聲明相同的變量來(lái)指定節(jié)點(diǎn)或關(guān)系之間的相等性。等量連接允許在路徑模式中指定循環(huán)。

MATCH (n:Station {name: 'London Euston'})<-[:CALLS_AT]-(s1:Stop)
  -[:NEXT]->(s2:Stop)-[:CALLS_AT]->(:Station {name: 'Coventry'})
  <-[:CALLS_AT]-(s3:Stop)-[:NEXT]->(s4:Stop)-[:CALLS_AT]->(n)
RETURN s1.departs+'-'+s2.departs AS outbound,
  s3.departs+'-'+s4.departs AS `return`

量化路徑模式

通過(guò)使用量化路徑模式來(lái)匹配不同長(zhǎng)度的路徑,從而允許您搜索長(zhǎng)度未知或在特定范圍內(nèi)的路徑。

在搜索可從錨節(jié)點(diǎn)到達(dá)的所有節(jié)點(diǎn)、查找連接兩個(gè)節(jié)點(diǎn)的所有路徑,或者遍歷可能具有不同深度的層次結(jié)構(gòu)時(shí),量化路徑模式可能非常有用。

量化路徑模式通過(guò)將路徑模式的重復(fù)部分提取到括號(hào)中并應(yīng)用量詞來(lái)解決此問(wèn)題。該量詞指定要匹配的提取模式的可能重復(fù)范圍。第一步是識(shí)別重復(fù)模式

((:Stop)-[:NEXT]->(:Stop)){1,3}
(:Stop)-[:NEXT]->(:Stop) |
(:Stop)-[:NEXT]->(:Stop)(:Stop)-[:NEXT]->(:Stop) |
(:Stop)-[:NEXT]->(:Stop)(:Stop)-[:NEXT]->(:Stop)(:Stop)-[:NEXT]->(:Stop)

這里的聯(lián)合運(yùn)算符(|)僅用于說(shuō)明;以這種方式使用它不是Cypher語(yǔ)法的一部分。在上面的擴(kuò)展中,如果兩個(gè)節(jié)點(diǎn)模式彼此相鄰,它們必須匹配相同的節(jié)點(diǎn):服務(wù)的下一個(gè)部分從上一個(gè)部分結(jié)束的地方開(kāi)始。因此,它們可以被重寫為具有任何過(guò)濾條件組合的單節(jié)點(diǎn)模式。在本例中,這是微不足道的,因?yàn)閼?yīng)用于這些節(jié)點(diǎn)的過(guò)濾只是標(biāo)簽Stop:

MATCH (:Station { name: 'Denmark Hill' })<-[:CALLS_AT]-(d:Stop)
      ((:Stop)-[:NEXT]->(:Stop)){1,3}
      (a:Stop)-[:CALLS_AT]->(:Station { name: 'Clapham Junction' })
RETURN d.departs AS departureTime, a.arrives AS arrivalTime

量化關(guān)系

量化關(guān)系允許以更簡(jiǎn)潔的方式重寫一些簡(jiǎn)單的量化路徑模式。

MATCH (d:Station { name: 'Denmark Hill' })<-[:CALLS_AT]-(n:Stop)
      ((:Stop)-[:NEXT]->(:Stop)){1,10}
      (m:Stop)-[:CALLS_AT]->(a:Station { name: 'Clapham Junction' })
WHERE m.arrives < time('17:18')
RETURN n.departs AS departureTime
                       
                       
MATCH (d:Station { name: 'Denmark Hill' })<-[:CALLS_AT]-
        (n:Stop)-[:NEXT]->{1,10}(m:Stop)-[:CALLS_AT]->
        (a:Station { name: 'Clapham Junction' })
WHERE m.arrives < time('17:18')
RETURN n.departs AS departureTime

量詞{1,10}的作用域是關(guān)系模式-[:NEXT]->,而不是與之相鄰的節(jié)點(diǎn)模式。更一般地說(shuō),其中量化路徑模式中包含的路徑模式具有以下形式:

(() <relationship pattern> ()) <quantifier>
//可以簡(jiǎn)化為
<relationship pattern> <quantifier>

Group variables

顧名思義,這個(gè)屬性表示兩個(gè)站點(diǎn)之間的距離。為了返回連接一對(duì)station的每個(gè)服務(wù)的總距離,需要一個(gè)變量來(lái)引用所遍歷的每個(gè)關(guān)系。類似地,要提取每個(gè)Stop的出發(fā)地和到達(dá)地屬性,需要引用遍歷的每個(gè)節(jié)點(diǎn)的變量。在這個(gè)在Denmark Hill和Clapham Junction之間匹配服務(wù)的示例中,變量l和m被聲明為匹配stop, r被聲明為匹配關(guān)系。變量origin只匹配路徑中的第一個(gè)Stop:

MATCH (:Station { name: 'Denmark Hill' })<-[:CALLS_AT]-(origin)
      ((l)-[r:NEXT]->(m)){1,3}
      ()-[:CALLS_AT]->(:Station { name: 'Clapham Junction' })
      

在量化路徑模式中聲明的變量稱為組變量。之所以這樣稱呼它們,是因?yàn)楫?dāng)在量化路徑模式之外引用時(shí),它們是匹配中綁定到的節(jié)點(diǎn)或關(guān)系的列表。要理解如何考慮組變量綁定到節(jié)點(diǎn)或關(guān)系的方式,可以擴(kuò)展量化路徑模式,并觀察不同變量如何匹配到整體匹配路徑的元素。

(l1)-[r1:NEXT]->(m1) |
(l1)-[r1:NEXT]->(m1)(l2)-[r2:NEXT]->(m2) |
(l1)-[r1:NEXT]->(m1)(l2)-[r2:NEXT]->(m2)(l3)-[r3:NEXT]->(m3)

每個(gè)變量的下標(biāo)表示它們屬于路徑模式重復(fù)的哪個(gè)實(shí)例。

l => [n2, n3, n4]
r => [r2, r3, r4]
m => [n3, n4, n5]

最短路徑

MATCH p = shortestPath((hby)-[:LINK*]-(cnm))
WHERE hby.name = 'Hartlebury' AND cnm.name = 'Cheltenham Spa'
RETURN [n in nodes(p) | n.name] AS stops
        
MATCH p = shortestPath((hby)-[:LINK*]-(cnm))
WHERE all(link in relationships(p) WHERE link.distance < 20) AND
      hby.name = 'Hartlebury' AND cnm.name = 'Cheltenham Spa'
RETURN [n in nodes(p) | n.name] AS stops
        
MATCH p = allShortestPaths((hby)-[link:LINK*]-(psh))
WHERE hby.name = 'Hartlebury' AND psh.name = 'Pershore'
RETURN [n in nodes(p) | n.name] AS stops

量化路徑模式斷言

primer

語(yǔ)法和語(yǔ)義

//節(jié)點(diǎn)模式
nodePattern ::= "(" [ nodeVariable ] [ labelExpression ]
    [ propertyKeyValueExpression ] [ "WHERE" booleanExpression ] ")"
    
//關(guān)系模式    
relationshipPattern ::= fullPattern | abbreviatedRelationship

fullPattern ::=
    "<-[" patternFiller "]-"
  | "-[" patternFiller "]->"
  | "-[" patternFiller "]-"

abbreviatedRelationship ::= "<--" | "--" | "-->"

patternFiller ::= [ relationshipVariable ] [ typeExpression ]
    [ propertyKeyValueExpression ] [ "WHERE" booleanExpression ]
    
//Lable 表達(dá)式
labelExpression ::= ":" labelTerm
//
labelTerm ::=
    labelIdentifier
  | labelTerm "&" labelTerm
  | labelTerm "|" labelTerm
  | "!" labelTerm
  | "%"
  | "(" labelTerm ")"
//
propertyKeyValueExpression ::=
  "{" propertyKeyValuePairList "}"

propertyKeyValuePairList ::=
  propertyKeyValuePair [ "," propertyKeyValuePair ]

propertyKeyValuePair ::= propertyName ":" valueExpression
//
pathPattern ::= [{ simplePathPattern | quantifiedPathPattern }]+

simplePathPattern ::= nodePattern
  [ { relationshipPattern | quantifiedRelationship } nodePattern ]*
       
quantifiedPathPattern ::=
  "(" fixedPath [ "WHERE" booleanExpression ] ")" quantifier

fixedPath ::= nodePattern [ relationshipPattern nodePattern ]+    
                           
quantifiedRelationship ::= relationshipPattern quantifier

Quantifiers

quantifier ::=
  "*" | "+" | fixedQuantifier | generalQuantifier
fixedQuantifier ::= "{" unsignedInteger "}"
generalQuantifier ::= "{" lowerBound "," upperBound "}"
lowerBound ::= unsignedInteger
upperBound ::= unsignedInteger
unsignedInteger ::= [0-9]+
Variant Canonical form Description
{m,n} {m,n} Between m and n iterations.
+ {1,} 1 or more iterations.
* {0,} 0 or more iterations.
{n} {n,n} Exactly n iterations.
{m,} {m,} m or more iterations.
{,n} {0,n} Between 0 and n iterations.
{,} {0,} 0 or more iterations.

請(qǐng)注意,帶有量詞{1}的量化路徑模式不等同于固定長(zhǎng)度的路徑模式。盡管最終的量化路徑模式將與其中包含的固定長(zhǎng)度路徑在沒(méi)有量詞的情況下匹配,但量詞的存在意味著路徑模式中的所有變量都將作為組變量公開(kāi)。

Graph patterns

graphPattern ::=
  pathPattern [ "," pathPattern ]* [ "WHERE" booleanExpression ]

Node pattern pairs

編寫一對(duì)相鄰的節(jié)點(diǎn)模式是無(wú)效的語(yǔ)法。例如,以下所有操作都會(huì)引發(fā)語(yǔ)法錯(cuò)誤:

然而,相鄰的節(jié)點(diǎn)模式對(duì)的放置是有效的,它間接來(lái)自于量化路徑模式的擴(kuò)展。

量化路徑模式迭代

當(dāng)一個(gè)量化的路徑模式被展開(kāi)時(shí),包含在其括號(hào)中的固定路徑模式被重復(fù)和鏈接。這導(dǎo)致成對(duì)的節(jié)點(diǎn)模式彼此相鄰。

((x:X)<--(y:Y)){3}

通過(guò)重復(fù)三次固定路徑模式(x: x)←-(y: y)來(lái)擴(kuò)展它,并在變量上添加索引以表明沒(méi)有隱含的等量連接

(x1:X)<--(y1:Y)(x2:X)<--(y2:Y)(x3:X)<--(y3:Y)

結(jié)果是兩對(duì)節(jié)點(diǎn)模式最終彼此相鄰,(y1:Y)(x2:X)(y2:Y)(x3:X)。在匹配過(guò)程中,每對(duì)節(jié)點(diǎn)模式將匹配相同的節(jié)點(diǎn),這些節(jié)點(diǎn)將滿足節(jié)點(diǎn)模式中謂詞的連接。例如,在第一對(duì)中,y1和x2將綁定到同一個(gè)節(jié)點(diǎn),并且該節(jié)點(diǎn)必須具有X和y的標(biāo)簽。這種擴(kuò)展和綁定如下圖所示:

簡(jiǎn)單路徑模式和量化路徑模式
量化路徑模式對(duì)

當(dāng)兩個(gè)量化路徑模式相鄰時(shí),第一模式的最后一次迭代的最右節(jié)點(diǎn)與第二模式的第一次迭代的最左節(jié)點(diǎn)合并。例如,以下相鄰的模式:

((:A)-[:R]->(:B)){2} ((:X)<--(:Y)){1,2}

將匹配與以下兩個(gè)路徑模式匹配的路徑的并集相同的路徑集:

(:A)-[:R]->(:B&A)-[:R]->(:B&X)<--(:Y)
(:A)-[:R]->(:B&A)-[:R]->(:B&X)<--(:Y&X)<--(:Y)
零迭代

如果量詞允許模式的零次迭代,例如{0,3},那么該模式的第0次迭代將導(dǎo)致兩邊的節(jié)點(diǎn)模式配對(duì)。

(:X) ((a:A)-[:R]->(b:B)){0,1} (:Y)
//匹配
(:X&Y)   // 節(jié)點(diǎn)具有X,Y標(biāo)簽
(:X&A)-[:R]->(:B&Y)

變長(zhǎng)關(guān)系

在Neo4j 5.9中引入量化路徑模式和量化關(guān)系的語(yǔ)法之前,Cypher中匹配可變長(zhǎng)度路徑的唯一方法是使用可變長(zhǎng)度關(guān)系。這個(gè)語(yǔ)法仍然可用。

Variant Description
* 1 or more iterations.
*n Exactly n iterations.
*m..n Between m and n iterations.
*m.. m or more iterations.
*..n Between 1 and n iterations.
Variable-length relationship Equivalent quantified path pattern
(a)-[*2]->(b) (a) (()-[]->()){2,2} (b)
(a)-[:KNOWS*3..5]->(b) (a) (()-[:KNOWS]->()){3,5} (b)
(a)-[r*..5 {name: 'Filipa'}]->(b) (a) (()-[r {name: 'Filipa'}]->()){1,5} (b)

可變長(zhǎng)度關(guān)系的變量可以在后續(xù)模式中使用,以引用該變量綁定到的關(guān)系列表。這與綁定到單個(gè)節(jié)點(diǎn)或關(guān)系的變量的等量連接相同。

值和類型

Cypher支持一系列數(shù)據(jù)值。在編寫Cypher查詢時(shí),不可能聲明數(shù)據(jù)類型。相反,Cypher將自動(dòng)推斷給定值的數(shù)據(jù)類型。

Property types

屬性類型:BOOLEAN、DATE、DURATION、FLOAT、INTEGER、LIST、LOCAL DATETIME、LOCAL TIME、POINT、STRING、ZONED DATETIME和ZONED TIME。

  • 屬性類型可以從Cypher查詢返回

  • 屬性類型可以用作參數(shù)。

  • 屬性類型可以存儲(chǔ)為屬性。

  • 屬性類型可以用Cypher字面值構(gòu)造。

簡(jiǎn)單類型的同構(gòu)列表可以存儲(chǔ)為屬性,但一般列表(請(qǐng)參閱構(gòu)造類型)不能存儲(chǔ)為屬性。作為屬性存儲(chǔ)的列表不能包含空值。

Cypher還提供了對(duì)字節(jié)數(shù)組的傳遞支持,字節(jié)數(shù)組可以作為屬性值存儲(chǔ)。由于性能原因,支持字節(jié)數(shù)組,因?yàn)槭褂肅ypher的泛型LIST(其中每個(gè)INTEGER都有64位表示)的成本太高。但是,字節(jié)數(shù)組不被Cypher視為第一類數(shù)據(jù)類型,因此它們沒(méi)有文字表示。

結(jié)構(gòu)類型

結(jié)構(gòu)類型:NODE、RELATIONSHIP和PATH。

  • 結(jié)構(gòu)類型可以從Cypher查詢返回。

  • 結(jié)構(gòu)類型不能用作參數(shù)。

  • 結(jié)構(gòu)類型不能存儲(chǔ)為屬性。

  • 結(jié)構(gòu)類型不能用Cypher字面值構(gòu)造。

NODE數(shù)據(jù)類型包括:id、label(s)和屬性映射。注意標(biāo)簽不是值,而是模式語(yǔ)法的一種形式。

RELATIONSHIP數(shù)據(jù)類型包括:id、關(guān)系類型、屬性映射、開(kāi)始節(jié)點(diǎn)id和結(jié)束節(jié)點(diǎn)id。

PATH數(shù)據(jù)類型是節(jié)點(diǎn)和關(guān)系的交替序列。

構(gòu)造類型

構(gòu)造類型中:LIST和MAP。

  • 可以從Cypher查詢返回構(gòu)造類型。

  • 構(gòu)造類型可以用作參數(shù)

  • 構(gòu)造的類型不能存儲(chǔ)為屬性(同構(gòu)列表除外)。

  • 構(gòu)造類型可以用Cypher字面值構(gòu)造。

LIST數(shù)據(jù)類型可以是簡(jiǎn)單值的同構(gòu)集合,也可以是異構(gòu)的有序值集合,每個(gè)值都可以具有任何屬性、結(jié)構(gòu)類型或構(gòu)造類型。

MAP數(shù)據(jù)類型是(鍵、值)對(duì)的異構(gòu)、無(wú)序集合,其中鍵是文字,而值可以具有任何屬性、結(jié)構(gòu)類型或構(gòu)造類型。

構(gòu)造類型值也可以包含null。

類型同義詞

Type Synonyms
ANY ANY VALUE
BOOLEAN BOOL
DATE
DURATION
FLOAT
INTEGER INT, SIGNED INTEGER
LIST<INNER_TYPE> ARRAY<INNER_TYPE>, INNER_TYPE LIST, INNER_TYPE ARRAY
LOCAL DATETIME TIMESTAMP WITHOUT TIMEZONE
LOCAL TIME TIME WITHOUT TIMEZONE
MAP
NODE ANY NODE, VERTEX, ANY VERTEX
NOTHING
NULL
PATH
POINT
PROPERTY VALUE ANY PROPERTY VALUE
RELATIONSHIP ANY RELATIONSHIP, EDGE, ANY EDGE
STRING VARCHAR
ZONED DATETIME TIMESTAMP WITH TIMEZONE
ZONED TIME TIME WITH TIMEZONE

所有Cypher類型都包含空值。要使它們不可為空,可以將not NULL附加到類型的末尾(例如BOOLEAN not NULL, LIST<FLOAT not NULL>)。

屬性類型明細(xì)

Type Min. value Max. value Precision
BOOLEAN False True -
DATE -999_999_999-01-01 +999_999_999-12-31 Days
DURATION P-292471208677Y-6M-15DT-15H-36M-32S P292471208677Y6M15DT15H36M32.999999999S Nanoseconds
FLOAT Double.MIN_VALUE [1] Double.MAX_VALUE 64 bit
INTEGER Long.MIN_VALUE Long.MAX_VALUE 64 bit
LOCAL DATETIME -999_999_999-01-01T00:00:00 +999_999_999-12-31T23:59:59.999999999 Nanoseconds
LOCAL TIME 00:00:00 23:59:59.999999999 Nanoseconds
POINT Cartesian: (-Double.MAX_VALUE, -Double.MAX_VALUE)Cartesian_3D: (-Double.MAX_VALUE, -Double.MAX_VALUE, -Double.MAX_VALUE)WGS_84: (-180, -90)WGS_84_3D: (-180, -90, -Double.MAX_VALUE) Cartesian: (Double.MAX_VALUE, Double.MAX_VALUE)Cartesian_3D: (Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE)WGS_84: (180, 90)WGS_84_3D: (180, 90, Double.MAX_VALUE) The precision of each coordinate of the POINT is 64 bit as they are floats.
STRING - - -
ZONED DATETIME -999_999_999-01-01T00:00:00+18:00 +999_999_999-12-31T23:59:59.999999999-18:00 Nanoseconds
ZONED TIME 00:00:00+18:00 23:59:59.999999999-18:00 Nanoseconds

時(shí)間類型

Type Date support Time support Time zone support
DATE
LOCAL TIME
ZONED TIME
LOCAL DATETIME
ZONED DATETIME
DURATION - - -

相比之下,DURATION不是即時(shí)類型。DURATION表示時(shí)間量,捕獲兩個(gè)瞬間之間的時(shí)間差,并且可以為負(fù)值。

新的版本,類型名字有所改變

Type Old type name
DATE Date
LOCAL TIME LocalTime
ZONED TIME Time
LOCAL DATETIME LocalDateTime
ZONED DATETIME DateTime
DURATION Duration

空間類型

null操作

邏輯操作

邏輯運(yùn)算符(AND、OR、XOR、NOT)將null作為三值邏輯的未知值。

a b a AND b a OR b a XOR b NOT a
false false false false false true
false null false null null true
false true false true true true
true false false true true false
true null null true null false
true true true true false false
null false false null null null
null null null null null null
null true null true null null

總結(jié):

  • AND:只要有一個(gè)為false,則為false。
  • OR:只要有一個(gè)為true,則為true。

IN

IN操作符遵循類似的邏輯。如果Cypher可以確定列表中存在某物,則結(jié)果將為真。任何包含null沒(méi)有匹配元素的列表都將返回null。否則,結(jié)果將為false。

Expression Result
2 IN [1, 2, 3] true
2 IN [1, null, 3] null
2 IN [1, 2, null] true
2 IN [1] false
2 IN [] false
null IN [1, 2, 3] null
null IN [1, null, 3] null
null IN [] false

使用all、any、none和single遵循類似的規(guī)則。如果結(jié)果可以確定地計(jì)算出來(lái),則返回true或false。否則將產(chǎn)生null。

[ ]

訪問(wèn)帶有null的list或map將返回null

返回null的表達(dá)式

  • 從列表中獲取缺失的元素:[][0]head([])。

  • 試圖訪問(wèn)節(jié)點(diǎn)或關(guān)系上不存在的屬性:n.missingProperty

  • 當(dāng)任何一方為空時(shí)的比較:1 < null。

  • 包含null的算術(shù)表達(dá)式:1 + null。

  • 某些函數(shù)調(diào)用的任何參數(shù)都為空:例如,sin(null)。

LIST

RETURN [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] AS list
RETURN range(0, 10)[3] AS element			//range創(chuàng)建LIST
RETURN range(0, 10)[-3] AS element			//下標(biāo)支持負(fù)數(shù)
RETURN range(0, 10)[0..3] AS list			//切片
RETURN range(0, 10)[0..-5] AS list			//
RETURN range(0, 10)[-5..] AS list			//
RETURN range(0, 10)[..4] AS list			//
RETURN range(0, 10)[15] AS list				//超過(guò)索引的單個(gè)元素返回null。
RETURN range(0, 10)[5..15] AS list			//超過(guò)索引的LIST 元素截?cái)唷?

MAP

RETURN {key: 'Value', listKey: [{inner: 'Map1'}, {inner: 'Map2'}]}
                                                  

Map 投影

Cypher支持Map投影,它允許從節(jié)點(diǎn)、關(guān)系和其他Map值構(gòu)造Map投影。

Map投影以綁定到要進(jìn)行投影的圖形實(shí)體的變量開(kāi)始,并包含一組逗號(hào)分隔的映射元素,由{}括起來(lái)。

map_variable {map_element, [, ...n]}

MAP投影將一個(gè)或多個(gè)鍵值對(duì)投影到MAP投影。有四種不同類型的MAP投影元素:

  • 屬性選擇器:將屬性名稱作為進(jìn)行投影,并將map_variable中的作為投影的。

  • 字面量實(shí)體 :這是一個(gè)鍵值對(duì),值是一個(gè)任意的表達(dá)式鍵:<expression>。

  • 變量選擇器:投影一個(gè)變量,變量名作為鍵,變量指向的值作為投影的值。它的語(yǔ)法就是變量。

  • 所有屬性選擇器:從map_variable值投射所有鍵值對(duì)。

  • 如果map_variable指向null,則整個(gè)MAP投影的值將為null。

  • 映射中的鍵名必須是STRING類型。

MATCH (keanu:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(movie:Movie)
WITH keanu, collect(movie{.title, .released}) AS movies
RETURN keanu{.name, movies: movies}	//  name屬性作為一個(gè)元素,movies字面量,作為KEY, movies變量作為VALUE,是個(gè)LIST
keanu
{movies: [{title: "The Devils Advocate", released: 1997}, {title: "The Matrix Revolutions", released: 2003}, {title: "The Matrix Resurrections", released: 2021}, {title: "The Matrix Reloaded", released: 2003}, {title: "The Matrix", released: 1999}], name: "Keanu Reeves"}
Rows: 1

類型轉(zhuǎn)換

參考 Functions

附錄

參考

https://neo4j.com/docs/cypher-manual/current/patterns/

https://neo4j.com/docs/cypher-manual/current/values-and-types/

https://neo4j.com/docs/cypher-manual/current/functions/文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-634236.html

到了這里,關(guān)于neo4j查詢語(yǔ)言Cypher詳解(二)--Pattern和類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包