我问的问题和你看到的here几乎一样,但是有一个限制,那就是必须使用groovy语法,而不是java语法。我有一个简单的people顶点图。每个顶点都有一个“age”属性,以年为单位列出该人的年龄。还有一些“worksFor”标记的边连接people顶点对。我希望看到所有边的两端的人都有相同的年龄属性。然后,我想要一个类似的查询,其中两个年龄相差不到3年。如前所述,这应该是groovy语法,而不是Java语法。Gremlin 3是首选,但Gremlin 2也是可以接受的。
kkih6yb81#
在边的两端的人具有相同年龄属性的所有边
g.V().as("a").outE("worksFor").as("e").inV().as("b").select("a","b").by("age"). where("a", eq("b")).select("e")
g.V().as("a").outE("worksFor").as("e").inV().as("b").select("a","b").by("age").
where("a", eq("b")).select("e")
字符串如果两个年龄相差不到3岁,
g.V().as("a").outE("worksFor").as("e").inV().as("b").select("a","b").by("age"). filter {Math.abs(it.get().get("a") - it.get().get("b")) < 3}.select("e")
filter {Math.abs(it.get().get("a") - it.get().get("b")) < 3}.select("e")
型
fd3cxomn2#
如果我们知道与所有其他顶点进行比较的目标顶点,则以下方法可能有效:
t=g.V().has('id', 'target_node_id').values('age').next()g.V().has('age').filter{it.get().value('age')-t<=3 && it.get().value('age')-t>=-3}
t=g.V().has('id', 'target_node_id').values('age').next()
g.V().has('age').filter{it.get().value('age')-t<=3 && it.get().value('age')-t>=-3}
字符串我不知道如何在一个查询中做到这一点。我也不知道是否有一个函数/步骤来获得绝对值。这只能部分满足您的需求,但它可能是一个开始。
ecbunoof3#
使用math比较两个日期属性步骤:
math
g.V().hasLabel('EnterExitDate').limit(10000).as('enter','exit') .where("enter",lt("exit")).by('enter').by('exit') .where(math('(exit - enter) / (3600*1000) ') .by(values('exit').map({ it.get().time })) .by(values('enter').map({ it.get().time })) .is(lt(1))) .valueMap()
g.V().hasLabel('EnterExitDate').limit(10000).as('enter','exit')
.where("enter",lt("exit")).by('enter').by('exit')
.where(math('(exit - enter) / (3600*1000) ')
.by(values('exit').map({ it.get().time }))
.by(values('enter').map({ it.get().time }))
.is(lt(1)))
.valueMap()
字符串此查询将查找1小时内发生的所有员工进出记录对。EnterExitDate类:
public class EnterExitDate { private Date enter; private Date exit; // getters and setters...}
public class EnterExitDate {
private Date enter;
private Date exit;
// getters and setters...
}
3条答案
按热度按时间kkih6yb81#
在边的两端的人具有相同年龄属性的所有边
字符串
如果两个年龄相差不到3岁,
型
fd3cxomn2#
如果我们知道与所有其他顶点进行比较的目标顶点,则以下方法可能有效:
字符串
我不知道如何在一个查询中做到这一点。我也不知道是否有一个函数/步骤来获得绝对值。
这只能部分满足您的需求,但它可能是一个开始。
ecbunoof3#
使用
math
比较两个日期属性步骤:字符串
此查询将查找1小时内发生的所有员工进出记录对。
EnterExitDate类:
型