我有玩家和游戏节点类型....玩家可以邀请其他玩家加入游戏。
一旦玩家 A 邀请玩家 B ,它将会是这样的:
A-[:INTERACT]->game<-[:INTERACT]-B , game.initiator = ID(A) , game.state = 'INVITE'
正如您所看到的,我在游戏中使用了一个属性来代表被邀请的人 游戏可以在很多州。
对于一个给定的玩家,我需要一个查询来检索他的所有游戏,除了这个状态= INVITE并启动它们。
尝试以下但未成功,即使听起来很简单:
START playerA = node()
match playerA-[:INTERACT]->game<-[:INTERACT]-otherPlayer
where not(game.state = 'INVITE' and game.initiator = ID(playerA))
return game
例如:
http://console.neo4j.org/r/fkpoht
START playerB = node(15)
MATCH playerB-[:INTERACT]->game<-[:INTERACT]-PlayerA
WHERE NOT (game.state = 'INVITE' AND game.initiator = ID(playerB))
RETURN game
为什么上述查询没有返回游戏?第一个条件为真,秒为假不是(真和假)=真......
这种简单查询的方法是什么?你的回答非常感谢。
答案 0 :(得分:2)
怎么样?
START playerA = node(1)
MATCH playerA-[:INTERACT]->game<-[:INTERACT]-otherPlayer
WHERE (game.state='INVITE' AND game.initiator <> 1) OR (game.state<>'INVITE')
RETURN game
答案 1 :(得分:0)
如果你需要检索他发起的所有游戏,并说明not INVITE
:
START playerA = node()
MATCH playerA-[:INTERACT]->game<-[:INTERACT]-otherPlayer
WHERE (game.initiator = ID(playerA)) AND NOT (game.state = 'INVITE')
RETURN game