【发布时间】:2020-01-07 17:00:09
【问题描述】:
下面是我的图表
g.addV('user').property('userId','user1').as('u1').
addV('user').property('userId','user2').as('u2').
addV('user').property('userId','user3').as('u3').
addV('group').property('groupId','group1').as('g1').
addV('group').property('groupId','group2').as('g2').
addV('group').property('groupId','group3').as('g3').
addV('folder').property('folderId','folder1').property('folderName','level1_1').property('description','level1_desc1').as('f1').
addV('folder').property('folderId','folder2').property('folderName','level2_2').property('description','level2_desc2').as('f2').
addV('folder').property('folderId','folder3').property('folderName','level3_3').property('description','level3_desc3').as('f3').
addV('object').property('objId','obj1').property('objTitle','objtitle1_1').property('description','o1_desc1').as('o1').
addV('object').property('objId','obj2').property('objTitle','objtitle2_2').property('description','o2_desc2').as('o2').
addV('object').property('objId','obj3').property('objTitle','objtitle3_3').property('description','o3_desc3').as('o3').
addE('in_folder').from('o1').to('f2').
addE('in_folder').from('o2').to('f3').
addE('in_folder').from('o1').to('f3').
addE('in_folder').from('f2').to('f1').
addE('in_folder').from('f3').to('f2').
addE('member_of').from('u1').to('g1').
addE('member_of').from('u2').to('g2').
addE('member_of').from('u3').to('g3').
addE('member_of').from('g3').to('g1').
addE('has_permission').from('g1').to('f1').
addE('has_permission').from('g1').to('f1').
addE('has_permission').from('g2').to('f2').
addE('has_permission').from('g3').to('f3').
addE('has_permission').from('u2').to('f1').iterate()
图表上的两个问题
#1 - 我如何在单个查询中检索用户可以访问的所有文件夹和对象
g.V().has('user','userId','user1').emit().until(__.not(outE('member_of'))).repeat(out('member_of')).outE('has_permission').inV().as('f').inE('in_folder').outV().as('a').select('a','f').range(1,20)
但是这个查询会导致每个对象及其文件夹顶点,而不是我的期望是接收像搜索结果一样考虑文件夹和对象作为搜索结果?
#2 - 在层次结构中获取对象顶点的基于对象顶点属性或文件夹顶点属性,这意味着所有对象都可以基于任何级别的文件夹顶点属性。
我写了下面的查询,当文件夹和对象顶点属性值匹配时返回结果。
g.V().has('user','userId','user1').emit().until(__.not(outE('member_of'))).repeat(out('member_of')).outE('has_permission').inV().has('folderName',textContains('level1')).inE('in').outV().has('objTitle',textContains('objtitle3')).as('o').select('o').valueMap('objTitle','objId').dedup().range(1,20)
如何在对象和文件夹顶点属性之间进行 OR 以及如何对文件夹和对象顶点的多个属性进行 OR?
【问题讨论】:
-
第二个问题你能详细介绍一下吗?例如预期结果或描述问题的数字。
-
根据文件夹顶点的属性值或对象自身属性值检索对象。在我所写的查询中,获取与 folderName 属性文本和 objTitle 属性文本匹配的对象。我如何使这个 OR 子句匹配任何一个文本。查询显示每个顶点类型的一个字段,但需要实时检查多个属性值之间的 OR 子句。
-
当 .has('folderName',textContains('fake')) 提供的静态对象文本与某些数据匹配时,我编写的查询应该返回结果
标签: acl graph-databases gremlin janusgraph