Gremlin图数据库复杂查询求助:筛选指定分类下的用户likes边
Gremlin查询实现方案
以下是适配你业务场景的查询语句,可直接根据你的实际字段名调整后使用:
g.V().hasLabel('group').has('groupName', '指定用户组名称') .in('memberOf') .outE('likes').as('targetLikes') .inV() .out('belongTo').has('categoryName', '意大利菜') .select('targetLikes') .valueMap(true)
语句说明
- 第一步先定位到你要查询的目标用户组,如果你使用用户组ID作为唯一标识,可将
has('groupName', '指定用户组名称')替换为hasId('你的目标用户组ID'),分类字段同理可替换为你实际使用的字段名 - 我们通过
as('targetLikes')提前给符合后续筛选条件的likes边打标记,避免遍历到分类后无法回溯到要返回的边对象 valueMap(true)中的true参数代表同时返回边的内置属性(id、label),如果你只需要边的自定义附加属性,删除该参数即可- 如果需要同时返回边关联的用户、食物信息,可以将最后两行替换为以下写法,按需调整返回的字段即可:
.select('targetLikes') .project('likes属性', '所属用户', '关联食物') .by(valueMap(true)) .by(outV().valueMap('userName', 'userId')) .by(inV().valueMap('foodName', 'foodId'))
性能优化建议
如果数据量较大,建议给group标签的groupName属性、category标签的categoryName属性添加索引,避免全表扫描影响查询效率。
内容的提问来源于stack exchange,提问作者xeroshogun
相关产品推荐
相关产品推荐

