我创建了以下查询,当我传递所有关系时,该查询正常工作。
@Query(value="START profile=node(*) "
+ "MATCH profile - [rel:create | stream | like | follow] - feeds "
+ "WHERE profile.id ={profileId} "
+ "WITH distinct feeds as feed, rel.date as date "
+ "ORDER BY date DESC "
+ "RETURN DISTINCT feed;")
public List<Feed> findByProfileId(@Param("profileId") String profileId);
但我想获取特定操作的数据,如下面的查询
@Query(value="START profile=node(*) "
+ "MATCH profile - [rel:{action}] - feeds "
+ "WHERE profile.id ={profileId} "
+ "WITH distinct feeds as feed, rel.date as date "
+ "ORDER BY date DESC "
+ "RETURN DISTINCT feed;")
public List<Feed> findByProfileId(@Param("action") String action,@Param("profileId") String profileId);
但是这不起作用,我得到以下错误。
org.neo4j.rest.graphdb.RestResult Exception: Invalid input '{': expected whitespace or an identifier
我认为这不是在关系中传递param的正确方法。 有没有办法如何实现这一目标。
答案 0 :(得分:5)
您不应在查询中使用start n=node(*)
在:Profile
:Profile(id)
等标签和索引/唯一约束
MATCH(个人资料:个人资料)WHERE profile.id = {profileId}
您不能直接使用rel-types作为参数,但您可以检查您的关系类型,例如针对在
或者
WHERE type(rel) = {action}
或
WHERE type(rel) IN {actions}
答案 1 :(得分:2)
目前无法将关系类型和标签作为查询参数传递。
在构建查询字符串时,您需要在应用程序中处理它。
以下是PHP中的一个简单示例:
$relTypes = array(':FACEBOOK_PROFILE',':TWITTER_PROFILE');
$relString = implode('|', $relTypes);
$q = 'MATCH (n:User)-['.$relString.']->(profile)';