<div id="article\_content" class="article\_content" style="color: #4b4b4b;"><code> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_800472.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6264" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_800472.png" width="294" height="292"></a></p> <h3>返回节点</h3> <p>返回一个节点,在返回语句中列出即可。</p> <p>查询:</p> <p align="left">START n=node(2)</p> <p align="left">RETURN n</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_832663.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6265" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_832663.png" width="207" height="130"></a></p> <h3>返回关系</h3> <p>查询:</p> <p align="left">START n=node(1)</p> <p align="left">MATCH (n)-\[r:KNOWS\]->(c)</p> <p align="left">RETURN r</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_859781.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6266" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_859781.png" width="147" height="121"></a></p> <h3>返回属性</h3> <p>查询:</p> <p align="left">START n=node(1)</p> <p align="left">RETURN n.name</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_885658.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6267" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_885658.png" width="175" height="140"></a></p> <h3>带特殊字符的标识符</h3> <p>使用不在英语字符表中的字符,可以使用’单引号。</p> <p>查询:</p> </code><p align="left"><code>START </code>This isn't a commonidentifier<code>=node(1)</code></p><code> </code><p align="left"><code>RETURN </code>This isn't a commonidentifier<code>.</code><<!!\_\_??>>\`</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_910112.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6268" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_910112.png" width="331" height="121"></a></p> <h3>列的别名</h3> <p>可以给展示出来的列名起别名。</p> <p>查询:</p> <p align="left">START a=node(1)</p> <p align="left">RETURN a.age AS SomethingTotallyDifferent</p> <p> 返回节点的age属性,但重命名列名。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_945911.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6269" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_945911.png" width="231" height="121"></a></p> <h3>可选属性</h3> <p>属性在节点上可能存在也可能不存在,可以使用问号来标识标识符即可。</p> <p>查询:</p> <p align="left">START n=node(1, 2)</p> <p align="left">RETURN n.age?</p> <p>如果存在age属性,则返回,不存在则返回null。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_981262.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6270" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_981262.png" width="147" height="187"></a></p> <h3>特别的结果</h3> <p>DISTINCT 仅检索特别的行,基于选择输出的列。</p> <p>查询:</p> <p align="left">START a=node(1)</p> <p align="left">MATCH (a)-->(b)</p> <p align="left">RETURN distinct b</p> <p>返回name为B的节点,但仅为一次。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_010143.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6271" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_010143.png" width="199" height="132"></a></p> <h2></h2> <h2>neo4j 聚合函数</h2> <div> <p>目录</p> <ol> <li>聚合Aggregation <ol> <li>计数</li> <li>计算节点数</li> <li>分组计算关系类型</li> <li>计算实体数</li> <li>计算非空可以值数</li> <li>求和sum</li> <li>平均值avg</li> <li>最大值max</li> <li>最小值min</li> <li>聚类COLLECT</li> <li>相异DISTINCT</li> </ol> </li> </ol> </div> <div id="article\_content" class="article\_content"> <h3><a name="t0"></a><a name="OLE\_LINK7"></a><a name="OLE\_LINK6"></a>聚合(Aggregation)</h3> <p>为集合计算数据,Cypher提供聚类功能,与SQL的group by类似。在return语句中发现的任何聚类函数,所有没有聚类函数的列将作为聚合key使用。图:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_164694.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6272" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_164694.png" width="554" height="247"></a></p> <h3 style="color: #666666;"><a name="t1"></a>计数</h3> <p>计数(count)使用来计算行数。Count有两种使用方法。Count(\*)计算匹配的行的行数,count(<标识符>)计算标识符中非空值数。</p> <h3 style="color: #666666;"><a name="t2"></a>计算节点数</h3> <p>计算链接到一个节点的节点数,可以使用count(\*)。</p> <p>查询:</p> <p>START n=node(2)</p> <p align="left">MATCH (n)-->(x)</p> <p align="left">RETURN n, count(\*)</p> <p> 返回开始节点和相关节点节点数。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_201812.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6273" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_201812.png" width="310" height="121"></a></p> <h3 style="color: #666666;"><a name="t3"></a>分组计算关系类型</h3> <p>计算分组了得关系类型,返回关系类型并使用count(\*)计算。</p> <p>查询:</p> <p>START n=node(2)</p> <p align="left">MATCH (n)-\[r\]->()</p> <p align="left">RETURN type(r), count(\*)</p> <p> 返回关系类型和其分组数。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_235916.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6274" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_235916.png" width="178" height="121"></a></p> <h3 style="color: #666666;"><a name="t4"></a>计算实体数</h3> <p>相比使用count(\*),可能计算标识符更实在。</p> <p>查询:</p> <p>START n=node(2)</p> <p align="left">MATCH (n)-->(x)</p> <p align="left">RETURN count(x)</p> <p> 返回链接到开始节点上的节点数</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_261786.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6275" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_261786.png" width="147" height="132"></a></p> <h3 style="color: #666666;"><a name="t5"></a>计算非空可以值数</h3> <p>查询:</p> <p>START n=node(2,3,4,1)</p> <p align="left">RETURN count(n.property?)</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_284861.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6276" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_284861.png" width="170" height="121"></a></p> <h3 style="color: #666666;"><a name="t6"></a>求和(sum)</h3> <p>Sum集合简单计算数值类型的值。Null值将自动去掉。如下:</p> <p>查询:</p> <p>START n=node(2,3,4)</p> <p align="left">RETURN sum(n.property)</p> <p> 计算所有节点属性值之和。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_315977.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6277" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_315977.png" width="188" height="146"></a></p> <h3 style="color: #666666;"><a name="t7"></a>平均值(avg)</h3> <p>Avg计算数量列的平均值</p> <p>查询:</p> <p>START n=node(2,3,4)</p> <p align="left">RETURN avg(n.property)</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_339561.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6278" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_339561.png" width="202" height="146"></a></p> <h3 style="color: #666666;"><a name="t8"></a>最大值(max)</h3> <p>Max查找数字列中的最大值。</p> <p>查询:</p> <p>START n=node(2,3,4)</p> <p align="left">RETURN max(n.property)</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_367243.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6279" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_367243.png" width="172" height="131"></a></p> <h3 style="color: #666666;"><a name="t9"></a>最小值(min)</h3> <p>Min使用数字属性作为输入,并返回在列中最小的值。</p> <p>查询:</p> <p align="left">START n=node(2,3,4)</p> <p align="left">RETURN min(n.property)</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_389118.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6280" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_389118.png" width="155" height="121"></a></p> <h3 style="color: #666666;"><a name="t10"></a>聚类(COLLECT)</h3> <p>Collect将所有值收集到一个集合list中。</p> <p>查询:</p> <p>START n=node(2,3,4)</p> <p align="left">RETURN collect(n.property)</p> <p> 返回一个带有所有属性值的简单列。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_422292.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6281" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_422292.png" width="171" height="121"></a></p> <h3 style="color: #666666;"><a name="t11"></a>相异(DISTINCT)</h3> <p>聚合函数中使用distinct来去掉值中重复的数据。</p> <p>查询:</p> <p>START a=node(2)</p> <p align="left">MATCH a-->b</p> <p align="left">RETURN count(distinct b.eyes)</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_449689.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6282" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_449689.png" width="203" height="121"></a></p> <h2></h2> <h2>neo4j 高级篇</h2> <p>目录</p> <ol> <li>排序Order by <ol> <li>通过节点属性排序节点</li> <li>通过多节点属性排序节点</li> <li>倒序排列节点</li> <li>空值排序</li> </ol> </li> <li>Skip <ol> <li>跳过前三个</li> <li>返回中间两个</li> </ol> </li> <li>Limit <ol> <li>返回第一部分</li> </ol> </li> <li>函数Functions <ol> <li>判断</li> <li>All</li> <li>Any</li> <li>None</li> <li>Single</li> <li>Scalar函数</li> <li>Length</li> <li>Type</li> <li>Id</li> <li>Coalesce</li> <li>Iterable函数</li> <li>Nodes</li> <li>Relationships</li> <li>Extract</li> </ol> </li> </ol> <div id="article\_content" class="article\_content"> <h3><a name="t0"></a>排序(Order by)</h3> <p>输出结果排序可以使用order by 子句。注意,不能使用节点或者关系排序,仅仅只针对其属性有效。图:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_058833.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6284" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_058833.png" width="232" height="439"></a></p> <h3 style="color: #666666;"><a name="t1"></a>通过节点属性排序节点</h3> <p>查询:</p> <p>START n=node(3,1,2)</p> <p align="left">RETURN n</p> <p align="left">ORDER BY n.name</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_081461.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6285" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_081461.png" width="342" height="173"></a></p> <h3 style="color: #666666;"><a name="t2"></a>通过多节点属性排序节点</h3> <p>在order by子句中可以通过多个属性来排序每个标识符。Cypher首先将通过第一个标识符排序,如果第一个标识符或属性相等,则在order by中检查下一个属性,依次类推。</p> <p>查询:</p> <p>START n=node(3,1,2)</p> <p align="left">RETURN n</p> <p align="left">ORDER BY n.age, n.name</p> <p> 首先通过age排序,然后再通过name排序。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_109720.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6286" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_109720.png" width="327" height="168"></a></p> <h3 style="color: #666666;"><a name="t3"></a>倒序排列节点</h3> <p>可以在标识符后添加desc或asc来进行倒序排列或顺序排列。</p> <p>查询:</p> <p>START n=node(3,1,2)</p> <p align="left">RETURN n</p> <p align="left">ORDER BY n.name DESC</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_144176.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6287" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_144176.png" width="317" height="186"></a></p> <p> </p> <h3 style="color: #666666;"><a name="t4"></a>空值排序</h3> <p>当排列结果集时,在顺序排列中null将永远放在最后,而在倒序排列中放最前面。</p> <p>查询:</p> <p>START n=node(3,1,2)</p> <p align="left">RETURN n.length?, n</p> <p align="left">ORDER BY n.length?</p> <p> 结果:</p> <h3> <a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_182112.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6288" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_182112.png" width="378" height="186"></a></h3> <h3><a name="t5"></a>Skip</h3> <p>Skip允许返回总结果集中的一个子集。此不保证排序,除非使用了order by’子句。 图:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_218560.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6289" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_218560.png" width="554" height="186"></a></p> <h3 style="color: #666666;"><a name="t6"></a>跳过前三个</h3> <p>返回结果中一个子集,从第三个结果开始,语法如下:</p> <p>查询:</p> <p>START n=node(3, 4, 5, 1, 2)</p> <p align="left">RETURN n</p> <p align="left">ORDER BY n.name</p> <p align="left">SKIP 3</p> <p> 前三个节点将略过,最后两个节点将被返回。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_250704.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6290" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_250704.png" width="208" height="175"></a></p> <p> </p> <h3 style="color: #666666;"><a name="t7"></a>返回中间两个</h3> <p>查询:</p> <p>START n=node(3, 4, 5, 1, 2)</p> <p align="left">RETURN n</p> <p align="left">ORDER BY n.name</p> <p align="left">SKIP 1</p> <p align="left">LIMIT 2</p> <p> 中间两个节点将被返回。</p> <p>结果:</p> <h3> <a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_276837.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6291" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_276837.png" width="209" height="175"></a></h3> <h3><a name="t8"></a>Limit</h3> <p>Limit允许返回结果集中的一个子集。图:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_308812.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6292" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_308812.png" width="554" height="175"></a></p> <h3 style="color: #666666;"><a name="t9"></a>返回第一部分</h3> <p>查询:</p> <p>START n=node(3, 4, 5, 1, 2)</p> <p align="left">RETURN n</p> <p align="left">LIMIT 3</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_333473.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6293" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_333473.png" width="189" height="194"></a></p> <h3><a name="t10"></a>函数(Functions)</h3> <p>在Cypher中有一组函数,可分为三类不同类型:判断、标量函数和聚类函数。图:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_365171.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6294" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_365171.png" width="468" height="399"></a></p> <h3 style="color: #666666;"><a name="t11"></a>判断</h3> <p>判断为boolean函数,对给出的输入集合做判断并返回true或者false。常用在where子句中过滤子集。</p> <h3 style="color: #666666;"><a name="t12"></a>All</h3> <p>迭代测试集合中所有元素的判断。</p> <p>语法:</p> <p>All(标识符 in iterable where 判断)</p> <p>参数:</p> <p>Ø iterable :一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>Ø 标识符:可用于判断比较的标识符。</p> <p>Ø 判断:<a name="OLE\_LINK10"></a><a name="OLE\_LINK9"></a>一个测试所有迭代器中元素的判断。</p> <p>查询:</p> <p align="left">START a=node(3), b=node(1)</p> <p align="left">MATCH p=a-\[\*1..3\]->b</p> <p align="left">WHERE all(x in nodes(p) WHERE x.age > 30)</p> <p align="left">RETURN p</p> <p>过滤包含age〈30的节点的路径,返回符合条件路径中所有节点。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_422880.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6295" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_422880.png" width="318" height="121"></a></p> <h3 style="color: #666666;"><a name="t13"></a>Any</h3> <p>语法:ANY(identifierin iterable WHERE predicate)</p> <p>参数:</p> <p>Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>Ø Identifier(标识符):可用于判断比较的标识符。</p> <p>Ø Predicate(判断):一个测试所有迭代器中元素的判断。</p> <p>查询:</p> <p align="left">START a=node(2)</p> <p align="left">WHERE any(x in a.array WHERE x = "one")</p> <p align="left">RETURN a</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_498320.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6296" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_498320.png" width="469" height="135"></a></p> <h3 style="color: #666666;"><a name="t14"></a>None</h3> <p>在迭代器中没有元素判断将返回true。</p> <p>语法:NONE(identifierin iterable WHERE predicate)</p> <p>Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>Ø Identifier(标识符):可用于判断比较的标识符。</p> <p>Ø Predicate(判断):一个测试所有迭代器中元素的判断。</p> <p>查询:</p> <p>START n=node(3)</p> <p align="left">MATCH p=n-\[\*1..3\]->b</p> <p align="left">WHERE NONE(x in nodes(p) WHERE x.age = 25)</p> <p align="left">RETURN p</p> <p> 结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_561704.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6297" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_561704.png" width="308" height="134"></a></p> <h3 style="color: #666666;"><a name="t15"></a>Single</h3> <p>如果迭代器中仅有一个元素则返回true。</p> <p>语法:SINGLE(identifierin iterable WHERE predicate)</p> <p>参数:</p> <p>Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>Ø Identifier(标识符):可用于判断比较的标识符。</p> <p>Ø Predicate(判断):一个测试所有迭代器中元素的判断。</p> <p>查询:</p> <p align="left">START n=node(3)</p> <p align="left">MATCH p=n-->b</p> <p align="left">WHERE SINGLE(var in nodes(p) WHERE var.eyes = "blue")</p> <p align="left">RETURN p</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_644184.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6298" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_644184.png" width="186" height="121"></a></p> <h3 style="color: #666666;"><a name="t16"></a>Scalar函数</h3> <p>标量函数返回单个值。</p> <h3 style="color: #666666;"><a name="t17"></a>Length</h3> <p>使用详细的length属性,返回或过滤路径的长度。</p> <p>语法:LENGTH(iterable )</p> <p>参数:</p> <p>Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>查询:</p> <p align="left">START a=node(3)</p> <p align="left">MATCH p=a-->b-->c</p> <p align="left">RETURN length(p)</p> <p>返回路径的长度。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_689540.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6299" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_689540.png" width="147" height="195"></a></p> <h3 style="color: #666666;"><a name="t18"></a>Type</h3> <p>返回关系类型的字符串值。</p> <p>语法:TYPE(relationship )</p> <p>参数:</p> <p>Ø Relationship:一条关系。</p> <p>查询:</p> <p align="left">START n=node(3)</p> <p align="left">MATCH (n)-\[r\]->()</p> <p align="left">RETURN type(r)</p> <p>返回关系r的类型。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_731150.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6300" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_731150.png" width="147" height="166"></a></p> <h3 style="color: #666666;"><a name="t19"></a>Id</h3> <p>返回关系或者节点的id</p> <p>语法:ID(property-container )</p> <p>参数:</p> <p>Ø Property-container:一个节点或者一条关系。</p> <p>查询:</p> <p align="left">START a=node(3, 4, 5)</p> <p align="left">RETURN ID(a)</p> <p>返回这三个节点的id。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_768179.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6301" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_768179.png" width="147" height="170"></a></p> <h3 style="color: #666666;"><a name="t20"></a>Coalesce</h3> <p>返回表达式中第一个非空值。</p> <p>语法:COALESCE(expression \[, expression\]\* )</p> <p>参数:</p> <p>Ø Expression:可能返回null的表达式。</p> <p>查询:</p> <p align="left">START a=node(3)</p> <p align="left">RETURN coalesce(a.hairColour?,a.eyes?)</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_803389.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6302" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_803389.png" width="249" height="121"></a></p> <h3 style="color: #666666;"><a name="t21"></a>Iterable函数</h3> <p>迭代器函数返回一个事物的迭代器---在路径中的节点等等。</p> <h3 style="color: #666666;"><a name="t22"></a>Nodes</h3> <p>返回一个路径中的所有节点。</p> <p>语法:NODES(path )</p> <p>参数:</p> <p>Ø Path:路径</p> <p>查询:</p> <p align="left">START a=node(3), c=node(2)</p> <p align="left">MATCH p=a-->b-->c</p> <p align="left">RETURN NODES(p)</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_860231.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6303" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_860231.png" width="278" height="121"></a></p> <h3 style="color: #666666;"><a name="t23"></a>Relationships</h3> <p>返回一条路径中的所有关系。</p> <p>语法:RELATIONSHIPS(path )</p> <p>参数:</p> <p>Ø Path:路径</p> <p>查询:</p> <p align="left">START a=node(3), c=node(2)</p> <p align="left">MATCH p=a-->b-->c</p> <p align="left">RETURN RELATIONSHIPS(p)</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_900552.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6304" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_900552.png" width="340" height="121"></a></p> <h3 style="color: #666666;"><a name="t24"></a>Extract</h3> <p>可以使用extract单个属性,或从关系或节点集合迭代一个函数的值。将遍历迭代器中所有的节点并运行表达式返回结果。</p> <p>语法:EXTRACT(identifier in iterable : expression )</p> <p>Ø Iterable(迭代器):一个集合属性,或者可迭代的元素,或一个迭代函数。</p> <p>Ø Identifier(标识符):闭包中表述内容的标识符,这决定哪个标识符将用到。</p> <p>Ø expression(表达式):这个表达式将对于迭代器中每个值运行一次,并生成一个结果迭代器。</p> <p>查询:</p> <p align="left">START a=node(3), b=node(4),c=node(1)</p> <p align="left">MATCH p=a-->b-->c</p> <p align="left">RETURN extract(n in nodes(p) : n.age)</p> <p>返回路径中所有age属性值。</p> <p>结果:</p> <p><a href="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_944842.png"><img title="Neo4j Cypher查询语言详解" alt="Cypher" class="alignnone size-full wp-image-6305" src="http://i1.static.ttlsa.com/www/2014/06/26/eGhoXzAxNjg=\_944842.png" width="275" height="128"></a></p> </div> </div> 原文地址:http://www.ttlsa.com/nosql/how-to-neo4j-cypher-query-language/ </div>