日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Neo4j:空值如何工作?

發布時間:2023/12/3 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Neo4j:空值如何工作? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我時不時地發現自己想將CSV文件導入Neo4j,而我總是對如何處理可能潛伏在其中的各種空值感到困惑。

讓我們從一個沒有CSV文件的示例開始。 考慮以下列表,以及我嘗試僅返回空值的嘗試:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value = null RETURN value(no changes, no records)

WITH [null,“ null”,“”,“ Mark”] AS值UNWIND值AS值WITH值WHERE值= null RETURN值(無更改,無記錄)

嗯,這很奇怪。 我曾期望至少將第一個值保留在集合中。 如果我們做相反的事情呢?

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value <> null RETURN value(no changes, no records)

WITH [null,“ null”,“”,“ Mark”] AS值UNWIND值AS值WITH值WHERE值<> null RETURN值(無更改,無記錄)

依然沒有! 讓我們嘗試返回比較的輸出,而不是過濾行:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value RETURN value = null AS outcome╒═══════╤═════════╕ │"value"│"outcome"│ ╞═══════╪═════════╡ │null │null │ ├───────┼─────────┤ │"null" │null │ ├───────┼─────────┤ │"" │null │ ├───────┼─────────┤ │"Mark" │null │ └───────┴─────────┘

好的,這不是我們所期望的。 一切都有“空”的“結果”! 如果我們要檢查值是否為字符串“ Mark”,該怎么辦?

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value RETURN value = "Mark" AS outcome╒═══════╤═════════╕ │"value"│"outcome"│ ╞═══════╪═════════╡ │null │null │ ├───────┼─────────┤ │"null" │false │ ├───────┼─────────┤ │"" │false │ ├───────┼─────────┤ │"Mark" │true │ └───────┴─────────┘

通過執行此查詢,我們了解到,如果比較的一側為null,則返回值將始終為null。

那么,如果行為空,我們如何排除呢?

事實證明,我們必須使用'is'關鍵字而不是使用等于運算符。 讓我們看看它是什么樣的:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value is null RETURN value╒═══════╕ │"value"│ ╞═══════╡ │null │ └───────┘

和積極的情況:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value is not null RETURN value╒═══════╕ │"value"│ ╞═══════╡ │"null" │ ├───────┤ │"" │ ├───────┤ │"Mark" │ └───────┘

如果我們想擺脫空字符串怎么辦?

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value <> "" RETURN value╒═══════╕ │"value"│ ╞═══════╡ │"null" │ ├───────┤ │"Mark" │ └───────┘

有趣的是,這也擺脫了我沒想到的空值。 但是,如果我們尋找與空字符串匹配的值:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value WITH value WHERE value = "" RETURN value╒═══════╕ │"value"│ ╞═══════╡ │"" │ └───────┘

也不在那里! 嗯,這是怎么回事:

WITH [null, "null", "", "Mark"] AS values UNWIND values AS value RETURN value, value = "" AS isEmpty, value <> "" AS isNotEmpty╒═══════╤═════════╤════════════╕ │"value"│"isEmpty"│"isNotEmpty"│ ╞═══════╪═════════╪════════════╡ │null │null │null │ ├───────┼─────────┼────────────┤ │"null" │false │true │ ├───────┼─────────┼────────────┤ │"" │true │false │ ├───────┼─────────┼────────────┤ │"Mark" │false │true │ └───────┴─────────┴────────────┘

除非我們顯式檢查值“為空”,否則對于每種等式匹配,空值似乎都會被過濾掉。

那么,當我們使用Neo4j的LOAD CSV工具解析CSV文件時,如何利用這些知識呢?

假設我們有一個CSV文件,如下所示:

$ cat nulls.csv name,company "Mark", "Michael","" "Will",null "Ryan","Neo4j"

$ cat nulls.csv名稱,公司“ Mark”,“ Michael”,“” Will”,空“ Ryan”,“ Neo4j”

因此,前三行都沒有“ company”的值。 我根本沒有任何值,Michael有一個空字符串,Will有一個空值。 讓我們看看LOAD CSV是如何解釋的:

load csv with headers from "file:///nulls.csv" AS row RETURN row╒═════════════════════════════════╕ │"row" │ ╞═════════════════════════════════╡ │{"name":"Mark","company":null} │ ├─────────────────────────────────┤ │{"name":"Michael","company":""} │ ├─────────────────────────────────┤ │{"name":"Will","company":"null"} │ ├─────────────────────────────────┤ │{"name":"Ryan","company":"Neo4j"}│ └─────────────────────────────────┘

我們已經從上面全面了解了所有組合。 我們想為每行創建一個Person節點,但僅在定義了實際公司的情況下才創建Company節點和關聯的“ WORKS_FOR”關系hp –我們不想創建一個空公司。

因此,我們只想為Ryan行創建一個公司節點和'WORKS_FOR'關系。

以下查詢可以解決問題:

load csv with headers from "file:///nulls.csv" AS row MERGE (p:Person {name: row.name}) WITH p, row WHERE row.company <> "" AND row.company <> "null" MERGE (c:Company {name: row.company}) MERGE (p)-[:WORKS_FOR]->(c)Added 5 labels, created 5 nodes, set 5 properties, created 1 relationship, statement completed in 117 ms.

使用“ file:///nulls.csv”中的標頭加載csv AS行合并(p:Person {name:row.name})WITH p,row WHERE row.company <>“” AND row.company <>“ null ” MERGE(c:Company {name:row.company})MERGE(p)-[:WORKS_FOR]->(c)添加了5個標簽,創建了5個節點,設置了5個屬性,創建了1個關系,語句在117毫秒內完成。

如果我們可視化所創建的內容:

完善。 也許這種行為是顯而易見的,但它總是讓我感到震驚,因此希望它對其他人也有用!

翻譯自: https://www.javacodegeeks.com/2017/02/neo4j-null-values-even-work.html

總結

以上是生活随笔為你收集整理的Neo4j:空值如何工作?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。