比方說,我的圖模型包含類型爲A的節點,它與同類型的其他節點具有父/子關係。如何用Neo4j OGM類型查詢過濾相關對象?
@NodeEntity(label = "A")
class A {
@Relationship(type = "PARENT")
private A parent;
// other relations to different types
...
}
我用下面的方法會執行復雜查詢(分頁,篩選,可選匹配等)
session.query(A.class, cypher, parameters)
其中暗號說法是一樣的東西
MATCH (node:A) WHERE ... OPTIONAL MATCH ... RETURN node, ... ORDER BY node.id ASC LIMIT 100
現在,我也想爲每個結果(也是類型A)獲取父節點。對於這一點,我伸出我的
MATCH (node:A) WHERE ... OPTIONAL MATCH parentRels=(node)-[parentRel:PARENT*1..]->(:A) RETURN node, collect(parentRel) ORDER BY node.id ASC LIMIT 100
我天真地期望看到的查詢是我相同的對象列表A,其中每個父字段是很好的填充,直到根。 Neo4j返回的結果是正確的,但OGM返回的映射結果是無用的,因爲現在它不僅包含我感興趣的節點(父域正確填充,是),但所有父節點也最終結束在結果列表中!
所以我開始尋找隱藏的OGM特性,我可以指定結果列(上面的例子中的'節點')與感興趣的節點,但這似乎不可能。
唯一的解決方案,我看到的是:
- 在單獨的查詢:(取父節點
- 做映射自己:(:(
- 獲取有關IDS基於一個單獨的查詢和過濾器上。
也許有人看到一個更好的解決方案?
Thx爲您的答覆。使用不同的標籤是不行的,因爲我們真的在談論相同的節點類型。關於你的第二個選項,如果我只返回關係,那麼我將無法瀏覽我的節點afaik。我會填補一個問題,因爲這似乎並不是一個孤立的用例... – Christian
https://github.com/neo4j/neo4j-ogm/issues/351 – Christian
@Christian只記得還有另一種方式..見編輯回答 –