在图表模型中,我有一个名为timeCategory
的顶点,其子项为year-vertices
,month-vertices
和day-vertices
。我能够确定edge-label
与IS_YEAR
,一个月IS_MONTH
等的一年。
我想做一个返回给定年份范围的所有顶点的查询,类似于以下代码:
GremlinPipeline yearPipe = new GremlinPipeline(timeCategory).out("IS_YEAR").property("year")
.filter(new PipeFunction<Integer, Boolean>() {
public Boolean compute(Integer i)
{
return i < 2013 && i >= 2011;
}
});
for(Object v : yearPipe) {
//v is an Integer, but i need the vertex
System.out.println(v);
}
...这适用于打印所有属性值(年份为整数),但我需要的是所有VERTICES的列表,其中年属性在给定范围之间。
我的第二个问题是关于从管道中的值进行交叉。
例如:我有三个管道,一个管道,一个月管和日期管道,以及包含标识一年,一月或一天的顶点的管道。
是否可以将所有传出顶点都放到一个特殊日期......
Semi-Code:allVertices2012-01-01 = yearpipe.out()AND monthpipe.out()AND daypipe.out
当然,我可以在一些for-each-loops中做一些比较,但我想知道是否有一种(简单的)gremlin方式来做得更好。
答案 0 :(得分:2)
您的问题有两种解决方案。这是在Gremlin-Groovy:
timeCategory.out('IS_YEAR').filter{year = it.getProperty('year'); year < 2013 && year >= 2011}
-OR -
timeCategory.out('IS_YEAR').property('year').filter{it < 2013 && it >= 2011}.back(1)
以下是您在Gremlin-Java代码中的答案(上面的第二个表示):
GremlinPipeline yearPipe = new GremlinPipeline(timeCategory).out("IS_YEAR").property("year")
.filter(new PipeFunction<Integer, Boolean>() {
public Boolean compute(Integer i)
{
if(i<2013 && i>=2011)
return true;
else
return false;
}
}).back(1);
答案 1 :(得分:0)
好了一些简短的教程阅读之后,我发现.back(x)上的参数应该是2 ...所以,使用.back(2)你将得到你的顶点。 顺便说一句。在http://markorodriguez.com提供的示例对于gremlin快速启动来说要好得多,然而在我看来这些在github-wiki上。
对于我的第二个问题:我发现有一个关于gremling-users的话题,很好地描述了我的问题: