我想将属性添加到顶点属性.在gremlin中我将属性"phone"添加到顶点属性"places",其值为"place1"
g.V(v).properties('places').hasValue('place1').property('phone',"123456789")
Run Code Online (Sandbox Code Playgroud)
没有使用事务提交它工作正常.但是当我在java代码中使用这种方式时,它没有用.那么在java代码中,如何向vertex属性添加属性?谢谢您帮忙.
我从网址上下载了EC2服务器上的Titan Version 1.0
然后我用以下命令解压缩并运行titan服务器:
bin/titan.sh启动
Forking Cassandra...
Running `nodetool statusthrift`... OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300).... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182).... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.
Run Code Online (Sandbox Code Playgroud)
然后我尝试从Titan 1.0版本的HTTP请求(在titan 0.4版本Rexster工作正常)但我得到以下错误
Tinkerpop 2 用于通过 Gremlin.defineStep(..) 支持用户定义的步骤
如何使用 Tinkerpop 3 实现相同的效果?
是否有任何 Gremlin API 可以创建自定义步骤并组合一组遍历步骤?
任何建议将受到高度赞赏。
谢谢卡尼斯卡
获取具有相同属性键的值的最佳方法是什么?
编辑:很抱歉更改问题,我的要求是从任一部门获得一名员工
我需要获取为IT或销售部门工作的所有员工,并由ID为123的经理进行管理.
我用过
g.V().has('managerId',123).out('manages').as('employee')
.out('worksFor').has('departmentName','IT','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud)
其中out('worksAt')给人部门.
我们可以在一个has()步骤中执行此操作,还是应该使用union()步骤
g.V().has('managerId',123).out('manages').as('employee').out('worksFor')
.union(__.has('departmentName','IT'),__.has('departmentName','Sales')
.select('employee')
Run Code Online (Sandbox Code Playgroud) 当父节点使用gremlin查询丢弃时,我需要删除所有子节点.
假设
A
/ \
B C
/ \
D E
/ \
F G
/ \
H I
Run Code Online (Sandbox Code Playgroud)
如果我们想要丢弃'B'顶点,那么它的孩子'D','E','F','G','H'和'I'vertex也应该掉线.你能告诉我怎么放弃.
我已经设置了 Tinkerpop Gremlin Server 3.2.3 和 Tinkerpop Gremlin Console 3.2.3,并将 janusgraph 0.1.1 作为插件添加到两者中。
我在远程模式下运行以下代码,结果在下面列出的异常中
:remote connect tinkerpop.server conf/remote.yaml
:> graph = GraphFactory.open('conf/hadoop-graph/hadoop-load.properties')
:> blvp = BulkLoaderVertexProgram.build().writeGraph('conf/connection.properties').create(graph)
:> graph.compute(SparkGraphComputer).program(blvp).submit().get()
Run Code Online (Sandbox Code Playgroud)
例外
java.lang.IllegalArgumentException: Graph does not support the provided graph computer: SparkGraphComputer
at org.apache.tinkerpop.gremlin.structure.Graph$Exceptions.graphDoesNotSupportProvidedGraphComputer(Graph.java:1140)
at org.janusgraph.graphdb.tinkerpop.JanusGraphBlueprintsGraph.compute(JanusGraphBlueprintsGraph.java:145)
at org.apache.tinkerpop.gremlin.structure.Graph$compute$0.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at Script4.run(Script4.groovy:1)
at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:619)
at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:448)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:119)
at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:287)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Run Code Online (Sandbox Code Playgroud)
上面的代码在本地模式下工作正常,任何人都可以帮助我在这里缺少什么。
为什么这两者会产生不同的结果?
graph.traversal()
.V().map(__.out("contains"))
.valueMap(true).next(100)
Run Code Online (Sandbox Code Playgroud)
相比
graph.traversal()
.V().out("contains")
.valueMap(true).next(100)
Run Code Online (Sandbox Code Playgroud)
为什么我更喜欢使用 map 而不是直接调用 .out() 方法?这样我就可以组织我的代码,在那里我可以从方法中获取遍历并“映射”到现有的遍历。
我无法通过执行来选择特定顶点g.V(3640).valueMap(true).unfold()。任何在命令中的括号之间包含 ID 的命令g.V()似乎都不起作用。
这就是我所做的:
我是图形数据库新手,正在尝试使用 Gremlin 控制台。我首先创建一个实例:
graph = TinkerGraph.open()
g=graph.traversal()
Run Code Online (Sandbox Code Playgroud)
并通过导入数据库文件加载示例数据.graphml:
g.io(graphml()).readGraph('/full/path/to/air-routes-latest.graphml')
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常,因为计数给出了很好的结果
gremlin> g.V().count()
==>3642
Run Code Online (Sandbox Code Playgroud)
不幸的是,以下内容不起作用:
gremlin> g.V(3640).valueMap(true).unfold()
Run Code Online (Sandbox Code Playgroud)
我认为这很奇怪,因为通过执行以下命令
gremlin> g.V()
==>v[3640]
==>v[2306]
...
Run Code Online (Sandbox Code Playgroud)
该 ID 似乎确实存在。为什么我无法访问特定 ID,有什么想法吗?我尝试了不同的命令,但g.V()似乎工作正常,但g.V(3640)事实并非如此。是否因为我使用 TinkerGraph 而不是 Gremlin 数据库,可能会出现什么问题?
编辑:
看来我的 id 被保存为字符串,因为g.V("2").valueMap(true).unfold()确实给了我结果。
我有一个用例,其中用户位于诸如
user1 --HAS_CHILD-> user2 --HAS_CHILD-> user3 --HAS_CHILD-> user4
对于给定的用户,我需要获得该用户拥有的所有汽车以及该用户的孩子拥有的所有汽车。对于汽车,我需要拥有用户(所有者)以及该用户与给定用户的深度。
例如 给定的用户为user2,则user3的深度为1,user4的深度为2。
我可以使用以下查询获取汽车的详细信息和所有者信息,但如何获取childDepth呢?
g.V().has("User", "id", "user2")
.union(
__.out("OWNS").hasLabel("Car"),
__.repeat(
__.out("HAS_CHILD").hasLabel("User")
).emit().out("OWNS").hasLabel("Car")
)
.project("plateNumber", "owner", "model", "year", "childDepth")
.by(__.values("plateNumber").fold())
.by(__.in("OWNS").values("owner").fold())
.by(__.values("model").fold())
.by(__.values("year").fold())
.by(???)
Run Code Online (Sandbox Code Playgroud) 我有一个图表,其中顶点有几个出站边类型,并且每个边类型都有属性。我想从每个顶点获取出站边的计数,但将计数限制为具有特定标签和属性值的边。
到目前为止,我有:
g.V().hasLabel("vertexLabel").as("source")
.outE("edgeLabel").has("edgeProp", "propValue").as("edge")
.select("source", "edge")
Run Code Online (Sandbox Code Playgroud)
这给了我一个包含正确标签和属性的每个源顶点和每个输出边的列表。我想要做的是将其减少为每个源顶点的单个条目和出站边数的计数。但是,我似乎无法groupCount与outE. 我得到的最接近的是:
g.V().hasLabel("vertexLabel").as("source").out("edgeLabel").groupCount()
Run Code Online (Sandbox Code Playgroud)
这让我按源顶点计数,但包括带有该标签的所有边,而不管它们具有什么属性值。
我知道这可能需要一个group().by()步骤,但我不确定如何形成它。
提前致谢。
tinkerpop3 ×10
gremlin ×9
janusgraph ×2
java ×2
tinkergraph ×2
tinkerpop ×2
titan ×2
apache-spark ×1
graph ×1
rexster ×1