ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

图数据库入门教程(十一)local

2022-08-29 14:05:18  阅读:172  来源: 互联网

标签:count name 地铁站 数据库 入门教程 station local out


local的用法

求地铁站直接连接地铁站数量的平均数,一般一个地铁站联通着两个站,上一站下一站,但是如果是换乘车站,连接数量可能多一些

g.V().has("station","name","农大南路").out().count()

//输出
[2]
g.V().has("station","name","西二旗").out().count()

//输出
[3]

gremlin的mean是用来算平均值的

g.V().hasLabel('station').out('route').count().mean()

//输出
[792.0]

这个结果是我们想要的吗?明显不是。为什么会出现这结果呢?因为我们在这个语句中,执行到count后,的结果就是792,我们对792求平均数相当于792/1,自然得到错误的结果。我们调整下语句

g.V().hasLabel('station').local(out('route').count()).mean()

//输出
[2.2564102564102564]

这个结果似乎是我们想要的。下面的查询删除了mean步骤,显示了此查询运行时遍历期间发生的情况。我用limit输出了几行

g.V().hasLabel('station').local(out('route').count()).limit(10)

//输出
[1, 2, 2, 2, 2, 2, 2, 2, 4, 3]

可以看到,我们得到的是一个几个,集合中是每个地铁站直达的地铁站的数量。当我们将mean应用于这个集合时,就是对这个集合求平均值。

从上可以看出,对于local()中包含的操作,是应用于local前的每个元素,并将结果应用到一个集合中。

通过local排序

我们来查询一西单直达地铁站,对结果进行排序,排序规则为该站能够直达的地铁站的数量

g.V().has("station","name","西单").out().group().by('name').by(out().count()).next()

//输出
{
    "宣武门": 4,
    "灵境胡同": 2,
    "天安门西": 2,
    "复兴门": 4
}

group 聚合后得到的结果是一个map

image-20220829133820508

我们要按照values排序得到的结果是我们想要的吗?

g.V().has("station","name","西单").out().group().by('name').by(out().count()).order().by(values,desc).next()

//输出
{
    "宣武门": 4,
    "灵境胡同": 2,
    "天安门西": 2,
    "复兴门": 4
}

答案是否定的,把语句改下

g.V().has("station","name","西单").out().group().by('name').by(out().count()).order(local).by(values,desc).next

//输出
{
    "宣武门": 4,
    "复兴门": 4,
    "灵境胡同": 2,
    "天安门西": 2
}

标签:count,name,地铁站,数据库,入门教程,station,local,out
来源: https://www.cnblogs.com/roylee666/p/16635690.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有