Gremlin查询CosmosDB:获取卡片及关联未来预订请求列表
优化Gremlin查询以获取卡片及对应未来预订请求
我来帮你调整并完善这个Gremlin查询,精准匹配你要获取「用户拥有的可用卡片 + 对应未来预订请求」的需求~
核心需求回顾
- 获取用户名下的卡片:排除当前被标记为
InUse的卡片 - 同时获取每张卡片关联的未来预订请求(即
AssignedTo边状态为FutureUse的请求节点)
优化后的完整查询
首先补充原查询缺失的「定位用户节点」起始步骤,同时修正拼写错误(原查询里.as('cards')在select中误写为.as('card')),最终查询如下:
g.V() // 替换为你的用户筛选条件,比如按ID/用户名定位目标Owner .hasLabel('User').has('id', 'your-target-user-id') .as('Owner') // 跳转到用户拥有的卡片节点 .outE('OwnedBy').inV() .hasLabel('Card') // 过滤掉当前处于InUse状态的卡片 .not(__.inE('AssignedTo').has('Status', 'InUse')) .as('cards') // 关联卡片对应的未来预订请求及关联边 .inE('AssignedTo').has('Status', 'FutureUse') .as('OwnedByRequestEdges') .outV() .hasLabel('Request') .as('OwnedByRequests') // 选择需要返回的结果集 .select('Owner', 'cards', 'OwnedByRequests', 'OwnedByRequestEdges')
关键步骤解释
- 定位Owner节点:开头的
g.V().hasLabel('User').has('id', 'your-target-user-id')需要替换成你实际的用户筛选规则,比如根据用户名、邮箱等找到对应的用户节点 - 筛选可用卡片:通过
.not(__.inE('AssignedTo').has('Status', 'InUse'))排除掉正在使用的卡片,只保留可用于未来预订的卡片 - 关联未来请求:遍历卡片的
AssignedTo边,筛选状态为FutureUse的请求,同时保留边的信息(如果不需要边数据,可去掉OwnedByRequestEdges的相关步骤) - 返回指定结果:
select语句确保你能拿到Owner、卡片、请求、关联边这几部分的完整数据
额外提示
- 确保节点/边的标签(比如
User、Card、OwnedBy)和你的Cosmos DB图结构完全一致,Gremlin对大小写敏感 - 如果需要获取节点的具体属性,可以在对应节点后添加
valueMap(),比如.as('cards').valueMap()就能拿到卡片的所有属性 - 若要查询所有用户的对应数据,直接去掉用户筛选条件,从
g.V().hasLabel('User')开始遍历即可
内容的提问来源于stack exchange,提问作者HDatom
相关产品推荐
相关产品推荐

