[英]Cypher Neo4j query
我正在開發某種社交瑣事游戲,我的主要數據庫是Neo4j。 在特定的用例中,我很難過。
我有兩個相關的對手節點的質詢節點:
(opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
挑戰與主題節點有關:
challenge-[:subject]->subject
每個主題都涉及許多問題:
subject-[:HAS]->question
如果對手在出現波紋管關系之前回答了一個具體問題:
opponent-[:ANSWER]->question
用例:我需要檢索X個問題(兩個對手都從未回答過)
我有以下Cypher查詢:
START challenge=node({0}) , subject=node({1})
MATCH (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
WITH opponent1,opponent2,subject
MATCH (subject)-[:HAS]->(question)
WHERE length(opponent1-[:ANSWER]->question) = 0 and length(opponent2-[:ANSWER]->question) = 0
return question limit {2}
上面的查詢工作正常,並檢索了挑戰的可能問題。
問題在於問題是因此獲得的,而不是隨機獲得的。
說明:每個與具有類別屬性的模板節點有關的問題。
question-[:TEMPLATE]->template
首先由模板創建的問題意味着模板中所有來自特定類別的問題在數據庫中都具有序列ID,因此上述查詢從同一類別中檢索問題。
我希望能夠隨機檢索挑戰性問題。 此外,從性能角度來看,查詢結構是否正確?
我不知道如何獲得隨機結果的本機方法,這里已經有關於此問題的詢問: neo4j:是否有一種方法/如何選擇隨機節點?
關於查詢,取決於數據,但是我寧願這樣:
START challenge=node({0}) , subject=node({1})
MATCH (opponent1)-[:OPPONENT]->(challenge)<-[:OPPONENT]-(opponent2)
WITH opponent1,opponent2,subject
MATCH (subject)-[:HAS]->(question)
WHERE not(opponent1-[:ANSWER]->question) and not (opponent2-[:ANSWER]->question)
return question limit {2}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.