图数据库入门教程(十一)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
我们要按照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 国际」许可协议进行许可。
分类:
gremlin
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)