我一直在尝试在Gremlin查询中计算这个if-else。 假设g.V({0})是下面的组顶点。
var q = "g.V({0}).as('groupName', 'groupId', 'ownerId').inE(eIsAdminOf, eIsMemberOf).as('rel', 'joinDate').outV().hasLabel(userLabel).as('memberId')";
//TODO:var q = "g.V({0}).as('groupName', 'groupId', 'ownerId').inE(eIsAdminOf";
//if .has('mCanList',true).inE(eIsAdminOf, eIsMemberOf)
//if .has('mCanList',false).inE(eIsAdminOf)
//, eIsMemberOf).as('rel', 'joinDate').outV().hasLabel(userLabel).as('memberId')";
我希望.inE(eIsAdminOf, eIsMemberOf)
基于属性值mCanList的真或假,如上面的评论中那样。
一直在尝试选择无济于事:
var q = "g.V({0}).as('groupName', 'groupId', 'ownerId','mCanList');
q += ".by(values('mCanList').choose(is(true),.inE(eIsAdminOf, eIsMemberOf), .inE(eIsAdminOf))";
q += '.as('rel', 'joinDate').outV().hasLabel(userLabel).as('memberId')”;
我正在使用node.js使用gremlin库构建gremlin查询。对我来说最糟糕的选择是构建2个单独的异步查询,这些查询根据
单独构建结果if .has('mCanList',true).inE(eIsAdminOf, eIsMemberOf) or
if .has('mCanList',false).inE(eIsAdminOf)
TIA
答案 0 :(得分:5)
我不确定我是否遵循了您所拥有的所有步骤标签背后的原因,因此我大部分都忽略了,以证明使用choose()
这似乎是您问题的焦点。我粗略地估计了我认为您的图形结构基于您如何描述问题(如果您有未来的问题,请考虑提供一些示例图形创建代码,可以轻松剪切/粘贴到Gremlin控制台会话中)。无论如何,这就是我认为你需要的东西:
gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV(id,1).property("mCanList",true).as('a').
......1> addV(id,2).as('b').
......2> addV(id,3).as('c').
......3> addE("isAdminOf").from("b").to("a").
......4> addE("isMemberOf").from("c").to("a").iterate()
gremlin> g.V(1).choose(has('mCanList',true),inE("isAdminOf","isMemberOf"),inE("isAdminOf"))
==>e[1][2-isAdminOf->1]
==>e[2][3-isMemberOf->1]
gremlin>
gremlin> g.V(1).property('mCanList',false)
==>v[1]
gremlin> g.V(1).choose(has('mCanList',true),inE("isAdminOf","isMemberOf"),inE("isAdminOf"))
==>e[1][2-isAdminOf->1]
如果我尝试直接编辑您的Gremlin,我认为您的遍历基本上只需要看起来像这样:
var q = "g.V({0});
q += ".choose(has('mCanList',true),inE(eIsAdminOf, eIsMemberOf), inE(eIsAdminOf))";
q += ".outV().hasLabel(userLabel)";
我认为" eIsAdminOf"," eIsMemberOf"和" userLabel"是JS变量 - 如果不是,如果它们碰巧是实际的标签名称,它们将需要它们周围的引号。同样,我不清楚你在使用as()
的所有用途时所做的事情 - 根据你的问题,这似乎与你的遍历无关。