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

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
}

作者:roylee666

出处:https://www.cnblogs.com/roylee666/p/16635690.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   树先生1024  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示