簡體   English   中英

如何有選擇地調用此 APOC 程序? (僅在節點的子集上)

[英]How can I call this APOC procedure selectively? (only on a subset of nodes)

我有一個 Neo4J 數據庫,其中包含許多 label com 節點。 這些節點包含一個關鍵屬性——它以我想要的方式對它們進行唯一分組。 它們還具有時間戳屬性,以及許多其他 integer 屬性。

這是我面臨的問題:我想使用 APOC 圖分組過程根據它們的關鍵屬性將這些節點聚合在一起。 但是,我想有選擇地這樣做——這樣我只聚合節點,如果它們的時間戳屬性滿足提供的時間 window。

我試圖根據時間戳使用 WHERE 子句匹配和過濾節點,但我無法將這些節點專門傳遞給nodes.group過程。 基本上,我需要弄清楚如何只在特定的節點子集上調用nodes.group 我會很感激任何幫助。

這是我正在執行的呼叫:

CALL apoc.nodes.group(['com'], ['key'], [{val1: 'sum', val2: 'sum', val3: 'sum',' time_start: 'collect'}]) YIELD node

正如我上面提到的,我嘗試執行

MATCH (c:com) WHERE c.time_start >= datetime('2020-12-16T21:45:05Z')

...在程序之前,然后鏈接查詢,但它不起作用。

該過程仍然在 com 關系的所有節點上調用,而不僅僅是我過濾的那些節點。

該過程本身不允許您通過此類過濾器。 然而,有兩種可能性可以規避這一點:

  1. 使用 vNode 和 vRelationship 自己構建虛擬圖
  2. 在您的節點選擇和分組之后設置一個臨時 label

我將專注於選項2:

以下圖為例:

UNWIND range(1, 200) AS i
CREATE (n:com)
SET n.timestamp = i, 
n.key = apoc.coll.randomItem(items)

假設我有一個假設的 window 使用,即30 to 70 ,我只能找到與我的 window 謂詞匹配的節點:

WITH [30, 70] AS window
MATCH (n:com) 
WHERE n.timestamp > window[0] 
AND n.timestamp < window[1]
RETURN count(n)

╒══════════╕
│"count(n)"│
╞══════════╡
│39        │
└──────────┘

在進入分組查詢之前,我只想說明您可以設置一個 label 並在同一個查詢中使用謂詞將其刪除。

WITH [30, 70] AS window
MATCH (n:com) 
WHERE n.timestamp > window[0] 
AND n.timestamp < window[1]
SET n:temporary
WITH count(n) AS doSomething
MATCH (n:temporary)
REMOVE n:temporary
WITH count(*) AS break, doSomething
RETURN doSomething

最后一個WITH count(*)是每個臨時節點不返回一行所必需的。

現在,使用這個邏輯,我們可以:

  1. 使用 window 謂詞的MATCH節點
  2. 為他們分配一個新的temporary label
  3. temporary label 上使用apoc.nodes.group
  4. 卸下temporary label
  5. 返回分組的節點
WITH [30, 70] AS window
MATCH (n:com) WHERE n.timestamp > window[0] AND n.timestamp < window[1]
SET n:temporary
WITH window, count(*) AS x
CALL apoc.nodes.group(['temporary'], ['key'], null, {})
YIELD node, relationship
WITH collect(node) AS elements
MATCH (n:temporary) REMOVE n:temporary
WITH count(*) AS break, elements
UNWIND elements AS element
RETURN element

╒════════════════════════╕
│"element"               │
╞════════════════════════╡
│{"count_*":6,"key":"f"} │
├────────────────────────┤
│{"count_*":6,"key":"e"} │
├────────────────────────┤
│{"count_*":12,"key":"d"}│
├────────────────────────┤
│{"count_*":1,"key":"c"} │
├────────────────────────┤
│{"count_*":5,"key":"b"} │
├────────────────────────┤
│{"count_*":9,"key":"a"} │
└────────────────────────┘

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM