原始答案
创建图形
CREATE
(player:Player {name: 'Player'}),
(shield:Armor {name: 'Shield'}),
(armor:Armor {name: 'Armor'}),
(gauntlets:Armor {name: 'Gauntlets'}),
(boots:Armor {name: 'Boots'}),
(helmet:Armor {name: 'Helmet'}),
(dragonSet:ArmorSet {name: 'Dragon Set'}),
(quest1:Quest {name: 'Quest I'}),
(quest2:Quest {name: 'Quest II'}),
(npc1:Npc {name: 'NPC I'}),
(npc2:Npc {name: 'NPC II'}),
(player)-[:WEARS]->(shield)-[:PART_OF]->(dragonSet),
(player)-[:WEARS]->(armor)-[:PART_OF]->(dragonSet),
(player)-[:WEARS]->(gauntlets)-[:PART_OF]->(dragonSet),
(npc1)-[:PROVIDES]->(quest1)-[:REWARDS]->(boots)-[:PART_OF]->(dragonSet),
(npc2)-[:PROVIDES]->(quest2)-[:REWARDS]->(helmet)-[:PART_OF]->(dragonSet);
第2行到第12行创建节点,而第13行到第17行建立节点之间的关系。
解决方案
MATCH
(player:Player)-[:WEARS]->(armor:Armor)-[:PART_OF]->(dragonSet:ArmorSet),
(missing)-[:PART_OF]->(dragonSet)
WHERE NOT (player)-[:WEARS]->(missing:Armor)
WITH DISTINCT missing
MATCH (npc:Npc)-[:PROVIDES]->(quest:Quest)-[:REWARDS]->(missing)
RETURN npc.name AS npcName, quest.name AS questName, missing.name AS missingArmorName;
解释
-
第2行定义了模式“A”
Player
戴
Armor
,这是
ArmorSet
".
-
missing
戴着失踪的帽子
“在第4行
Neo4j developers manual, WITH clauses chapter
)
-
第6行显示已识别的缺失
让我们取回
Quest
提供
Npc
-
结果
âââââââââââ¤ââââââââââââ¤âââââââââââââââââââ
â"npcName"â"questName"â"missingArmorName"â
âââââââââââªââââââââââââªâââââââââââââââââââ¡
â"NPC II" â"Quest II" â"Helmet" â
âââââââââââ¼ââââââââââââ¼âââââââââââââââââââ¤
â"NPC I" â"Quest I" â"Boots" â
âââââââââââ´ââââââââââââ´âââââââââââââââââââ
盔甲
探索
只是,我们必须给你们的型号加上一个标签
Monster
RANDOM_DROPS
.
CREATE
(player:Player {name: 'Player'}),
(shield:Armor {name: 'Shield'}),
(armor:Armor {name: 'Armor'}),
(gauntlets:Armor {name: 'Gauntlets'}),
(boots:Armor {name: 'Boots'}),
(helmet:Armor {name: 'Helmet'}),
(dragonSet:ArmorSet {name: 'Dragon Set'}),
(quest1:Quest {name: 'Quest I'}),
(quest2:Quest {name: 'Quest II'}),
(npc1:Npc {name: 'NPC I'}),
(npc2:Npc {name: 'NPC II'}),
(monster1:Monster {name: 'Monster I'}),
(monster2:Monster {name: 'Monster II'}),
(player)-[:WEARS]->(shield)-[:PART_OF]->(dragonSet),
(player)-[:WEARS]->(armor)-[:PART_OF]->(dragonSet),
(player)-[:WEARS]->(gauntlets)-[:PART_OF]->(dragonSet),
(npc1)-[:PROVIDES]->(quest1)-[:REWARDS]->(boots)-[:PART_OF]->(dragonSet),
(npc2)-[:PROVIDES]->(quest2)-[:REWARDS]->(helmet)-[:PART_OF]->(dragonSet),
(monster2)-[:RANDOM_DROPS]->(boots),
(monster1)-[:RANDOM_DROPS]->(gauntlets),
(monster1)-[:RANDOM_DROPS]->(shield),
(monster1)-[:RANDOM_DROPS]->(armor);
解决方案
MATCH
(player:Player)-[:WEARS]->(armor:Armor)-[:PART_OF]->(dragonSet:ArmorSet),
(missing)-[:PART_OF]->(dragonSet)
WHERE NOT (player)-[:WEARS]->(missing:Armor)
WITH DISTINCT missing
MATCH (npc:Npc)-[:PROVIDES]->(quest:Quest)-[:REWARDS]->(missing)
WHERE NOT (:Monster)-[:RANDOM_DROPS]->(missing)
RETURN npc.name AS npcName, quest.name AS questName, missing.name AS missingArmorName;
âââââââââââ¤ââââââââââââ¤âââââââââââââââââââ
â"npcName"â"questName"â"missingArmorName"â
âââââââââââªââââââââââââªâââââââââââââââââââ¡
â"NPC II" â"Quest II" â"Helmet" â
âââââââââââ´ââââââââââââ´âââââââââââââââââââ