2017-10-16 43 views
2

我想將數組存儲到Neo4j數據庫中,在知道數組字段類型之前,我將數組存儲爲逗號分隔的文本字段,並使用正則表達式查找具有特定項目的節點! 現在我想保存數組作爲數組字段,但我不能用「IN」關鍵字寫一個不區分大小寫的條件! 還有就是我在CS-文本字段中找到正則表達式:在數組字段中區分大小寫的搜索

MATCH (user:USER)-[:MEMBER_OF]->(group:SOME_GROUP) where 
group.resources =~ "(?i)(?:.*,|^)one_resource(?:,.*|$)" 
RETURN group 

我存儲的數據是這樣的:

One_Resource,Another_Resource,... 

而且結果是正確的,但我已經在抓取這個模型和陣列領域中的一些問題在檢索中更好。

你有任何建議或方法來解決這個問題?

這是我對陣列場暗號:

MATCH (node {hid:"abc"}) 
SET node.array_field = ["Foo","Bar","Baz","BaG"] 

而與此發現:

MATCH (node) WHERE "foo" IN node.array_field RETURN node 

但是,這是區分大小寫:(

感謝

+0

你知道[**我旗**](HTTP://www.regular- expressions.info/modifiers.html)。請看看它。這是你需要的 – Mandy8055

+0

我在我的正則表達式中使用了「i標誌」:'(?i)(?:。*,| ^)one_resource(?:,。* | $)',但正如我所知在數組字段中可以不使用正則表達式! –

回答

1

我創辦我的答案在書中:Learning Cypher

必須使用WHERE子句ANY (...IN...WHERE...)

MATCH (node) 
WHERE ANY (item IN node.array_field WHERE item =~ "(?i)foo") 
RETURN node 

現在可以使用正則表達式來尋找想要的節點。

有四個集合謂詞。它們分別是:

  • ANY:如果集合中的所有項目遵守規則
  • 這個謂詞返回TRUE:如果集合中的至少一個項目堅持 來表達
  • ALL這個謂詞返回TRUE
  • NONE:此斷言,如果集合中沒有項目符合規則
  • 單個返回TRUE:該謂詞返回TRUE,如果只有一個項目遵循規則

如果我們想標記爲NoSQL的,但不是所有的Neo4j書籍,我們可以使用NONE謂詞 如下:

MATCH (b:Book) 
WHERE ANY (tag IN b.tags WHERE tag = 'nosql') 
AND NONE (tag in b.tags WHERE tag = 'neo4j') 
RETURN b.title,b.tags