2011-10-12 58 views
1

让我们假设以下实体:Cypher使用节点Id查询

'user'有'blog',博客有'entries'。博客可以有多个用户,一个条目有三个属性,用户,博客和字符串条目。我想编写一个密码查询,返回特定博客和用户的所有条目。我有用户节点ID和博客ID。我可以使用用户ID来启动节点,但如何使用博客ID?我无法访问任何独特的东西,因此正在使用节点ID。

start user=(1) match (user)->[:BLOG]-(blog)->[:ENTRY](entry) where entry.blog = blogId return entry 

推荐将赞赏。

+0

刚一说明:在Neo4j的1.5不能使用'START富=(42)...'你必须使用'START富=节点(42)...' – prehfeldt

回答

0

起初你的密码查询看起来不对,也许其他版本比稳定?

start user=(1) match (user)->[:BLOG]-(blog)->[:ENTRY](entry) where entry.blog = blogId return entry 

如果您有用户ID和博客ID我觉得你可以试试这个:

START user=(userId), blog=(blogId) MATCH user-[:BLOG]->blog-[:ENTRY]->entry RETURN entry 

我认为,在图形数据库使用外键是不必要的。

+0

感谢Melug。我会尝试你的建议。我很确定原始查询是有效的。 – imamc

2

您还可以使用参数传递博客和用户标识符。

START user=({userId}), blog=({blogId}) MATCH user-[:BLOG]->blog-[:ENTRY]->entry RETURN entry 

然后用含有userId=1,blogId=2一个参数 - Map执行CYPHER查询。

如果您有博客ID,则不必传入用户。由于您没有指定用户和条目之间的关系(如AUTHOR),它会返回博客的所有条目,这可能不是您想要的。

START user=({userId}), blog=({blogId}) MATCH blog-[:ENTRY]->entry<-[:AUTHOR]-user RETURN entry 
相关问题