為什么Cypher WHERE不起作用?

【翻譯自:https://neo4j.com/developer/kb/why-where-clause-does-not-filter/

【由Neo4j APAC授權(quán)編譯發(fā)布】

當(dāng)我們在寫Neo4j Cyper查詢語句時,偶爾會發(fā)現(xiàn) WHERE 子句似乎不起作用時,可能會感到非常沮喪,您可以使用下面這些方法找出問題所在。

1、檢查OPTIONAL MATCH之后的WHERE子句

WHERE 子句不能單獨使用,它們始終與MATCH、WITH或OPTIONAL MATCH配對,并且此配對定義了 WHERE 子句執(zhí)行為 false 時的行為。

對于 WITH …? WHERE 和 MATCH …? WHERE,我們期望 WHERE 子句應(yīng)用于所有結(jié)果行,而當(dāng) WHERE 的值為 false 時則過濾行。

但是,OPTIONAL MATCH …? WHERE其行為有所不同,因為OPTIONAL MATCH不會刪除行。使用OPTIONAL MATCH時,如果給定的模式不匹配,或者其WHERE子句的值為false,則模式中新引入的變量對于給定的行將為null。從不刪除行,并且現(xiàn)有變量保持不變,當(dāng)真正的問題是將WHERE子句應(yīng)用于錯誤的事務(wù)時,我們會覺得 WHERE 子句根本不起作用。

MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:WORKED_ON]-(a:Animator)
WHERE m.releaseYear > 1999 AND a IS NOT NULL
RETURN m, collect(a) as animators

在上面的示例中,這看起來像是一個查詢,以獲取1999年之后發(fā)行的電影以及該電影的動畫師,其中動畫師為電影工作,但這是不正確的。WHERE子句只會影響OPTIONAL MATCH,因此將返回所有電影,沒有電影被過濾掉,但是動畫師集合將僅填充1999年之后發(fā)行的電影。

要解決這個問題,我們需要將WHERE移動到其他位置,以便將其與MATCH或WITH關(guān)聯(lián),以便根據(jù)需要過濾掉行:

MATCH (m:Movie)
OPTIONAL MATCH (m)<-[:WORKED_ON]-(a:Animator)
WITH m, a
WHERE m.releaseYear > 1999 AND a IS NOT NULL
RETURN m, collect(a) as animators
2、WHERE子句中檢查拼寫錯誤或大小寫不匹配

WHERE子句中錯字和拼寫錯誤很容易拋出,包括不匹配。

節(jié)點標(biāo)簽、關(guān)系類型、變量以及屬性鍵和值都區(qū)分大小寫,因此請確保前后一致并正確無誤。

MATCH (m:Movie)
WHERE NOT (m)<-[:worked_on]-(a:animator) AND m.ReleaseYear > 1999
RETURN m

上面的查詢沒有任何拼寫錯誤,但是關(guān)系類型、節(jié)點標(biāo)簽和屬性鍵的大小寫與圖中的實際情況有所不同。

3、檢查應(yīng)為數(shù)值的屬性是否存為字符串

在數(shù)值比較或匹配失敗的情況下,要確保比較的屬性是否為數(shù)值。

在文本結(jié)果視圖中,字符串值將用引號引起來,而數(shù)值將沒有。

在導(dǎo)入過程中,尤其是在CSV導(dǎo)入過程中,請?zhí)貏e注意,因為所有值都被解釋為字符串。您需要使用 toInteger() 或 toFloat() 將字符串轉(zhuǎn)換為數(shù)值,以避免出現(xiàn)此問題。

4、檢查屬性鍵和值中是否存在空格

屬性存在空格會使 WHERE 子句看起來不起作用,通常是圖數(shù)據(jù)而不是查詢本身的問題。

MATCH (m:Movie)<-[:ACTED_IN]-(p:Person)
WHERE p.name = 'Keanu Reeves'
RETURN m

上面的查詢看起來不錯,并且可能是完全正確的。但是,如果節(jié)點的 name 屬性存在空格“ Keanu Reeves”,則該查詢將不起作用。

仔細(xì)檢查節(jié)點和關(guān)系上的預(yù)期字符串值以查看是否存在意外的空格,如果使用Neo4j 瀏覽器,則文本結(jié)果視圖通常是輕松檢測多余空格的最佳方法。使用STARTS WITH、ENDS WITH或CONTAINS進(jìn)行查詢,可以幫助測試屬性值。

屬性鍵中多余的空格很少,但是偶爾會發(fā)生,例如從格式錯誤的文件導(dǎo)入數(shù)據(jù)時。

例如,如果我們嘗試導(dǎo)入具有以下標(biāo)頭的csv文件:

“nickName, firstName,lastName ”

firstName前有空格,lastName后面有空格。導(dǎo)入后,屬性鍵本身將包含空格,因此實際的屬性鍵將變?yōu)椤皀ickName”、“ firstName”和“l(fā)astName ”,如果沒有被發(fā)現(xiàn),可能很快會引起混亂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,316評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,481評論 3 415
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,241評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,939評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 71,697評論 6 409
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,182評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,247評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,406評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,933評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,772評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,973評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,516評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,209評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,638評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,866評論 1 285
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,644評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 47,953評論 2 373

推薦閱讀更多精彩內(nèi)容