首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >没有开始条款对。N=节点(*)

没有开始条款对。N=节点(*)
EN

Stack Overflow用户
提问于 2013-10-21 20:12:12
回答 1查看 268关注 0票数 2

我在Neo4J 2.0文档中看到,START子句是可选的,并且

Cypher将尝试从查询中推断起始点。

我在实验中发现

代码语言:javascript
代码运行次数:0
运行
复制
START user = node(*) 
MATCH (user:User)-[r:KNOWS]-(user2:User) 
RETURN user.username AS username, collect(user2.username) AS username2

给出了与

代码语言:javascript
代码运行次数:0
运行
复制
MATCH (user:User)-[r:KNOWS]-(user2:User) 
RETURN user.username AS username, collect(user2.username) AS username2

用于小数据集。

我的问题是:它的语义是否相同?他们是否总是返回相同的结果集(我不是在说订单)?即使对大型数据集也是如此?跳过START是否保证遍历所有节点?如果它们在语义上相等,为什么要使用node(*)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 20:41:47

您的查询在语义上并不相同,但它们总是返回相同的结果。他们将返回相同结果的原因是,在您的第一个查询中,在声明了“通用节点模式”node(*)之后,您将立即在MATCH子句中使用进一步的模式来限制它。在第二个查询中,您从一开始就说明了这个更窄的模式,但是由于两个MATCH子句是等价的,而且每个查询中声明的最窄的模式是相同的(而且RETURN子句是相同的),所以两个查询返回相同的结果。

START子句过去用于声明查询的初始模式,它与索引绑定在一起。很少建议或使用node(*)relationship(*),但子句用于索引检索,如START user=node:userIndex(name="Maciej Ziarko")中的那样。在2.0版本中,引入了标签和标签索引,这现在是绑定查询中节点的首选方法。

跳过START并不能保证遍历所有节点(或者更准确地说:绑定所有节点),但是您也不需要一个START子句。使用MATCH user (不限制使用标签或关系绑定到user的内容)仍然可以绑定数据库中的每个节点。它仍然很少被推荐或有用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19503801

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档