可以在neo4j cypher中使用case的模式

时间:2018-05-22 17:25:58

标签: neo4j cypher

是否可以在cypher中使用带有case语句的模式?特别是如果模式存在则返回true或false。我试图模仿人际关系,而友谊不会得到回报。

所以(用户) - [:朋友] - >(user2)是一个单独的数据点 (用户2) - [:朋友] - GT;(用户1)

然后我想运行一个查询,该查询将显示将其视为回馈的朋友的用户

看起来像这样的东西(显然不起作用)

@Override
public boolean onTouchEvent(MotionEvent event)
{
    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
        {
            if(event.getY() > screenY/2)
            {
                playerPoint1.set((int)event.getX(), (int)event.getY());
            }

            else if(event.getY() < screenY/2)
            {
                playerPoint2.set((int)event.getX(), (int)event.getY());
            }
        }
    }
    return true;
}

无论如何要做到这一点?

我知道一个解决方法是运行一个查询,寻找那些考虑user1朋友然后在我的应用程序中在cypher之外循环它们的人,但我想知道是否有一种纯密码方式来执行此操作。

1 个答案:

答案 0 :(得分:1)

CASE子句不是获取布尔结果的唯一方法,对于您的用例不是必需的。

(target)-[:teaches]->(asker)这样的模式会产生一个(可能是空的)路径集合,所以这会起作用:

MATCH (asker), (target)
RETURN asker, target,
  SIZE((target)-[:teaches]->(asker)) > 0 AS returnsFriendship

但如果只需要测试模式的存在,使用EXISTS函数会更好:

MATCH (asker), (target)
RETURN asker, target,
  EXISTS((target)-[:teaches]->(asker)) AS returnsFriendship