You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gremlin查询中连续独立or与同个or包含所有条件的差异

Gremlin 多or写法逻辑差异说明

两种写法的核心差异是筛选条件的逻辑组合规则完全不同,所以返回结果必然存在差异:

  • 连续使用两个独立or:两个or的结果是**逻辑与(AND)**关系
  • 所有条件放入同一个or:所有条件是**逻辑或(OR)**关系

第一种写法(两个独立or)逻辑

g.V(1).in('linked_to', 'used_by')
 .or(has('type', 'knows'), has('type', 'like'), has('type','follows'))
 .or(hasNot('last_used'), has('last_used',gt(datetime('2021-09-07T10:04:05.000Z'))))
 .out('linked_to', 'used_by')
 .dedup()

等价于同时满足两个规则的顶点才会被保留:

  1. type属性值为knows、like、follows三者之一
  2. 顶点没有last_used属性,或last_used属性值大于指定时间

对应逻辑表达式:(type ∈ ['knows','like','follows']) AND (无last_used OR last_used > 2021-09-07T10:04:05Z)
举个反例:如果顶点type是knows但last_used为2020年,会被过滤掉。


第二种写法(所有条件同个or)逻辑

g.V(1).in('linked_to', 'used_by')
 .or(has('type', 'knows'), has('type', 'like'), has('type','follows') , hasNot('last_used'), has('last_used',gt(datetime('2021-09-07T10:04:05.000Z'))))
 .out('linked_to', 'used_by')
 .dedup()

等价于满足任意一个规则的顶点就会被保留:

  1. type属性值为knows、like、follows三者之一
  2. 顶点没有last_used属性
  3. last_used属性值大于指定时间

对应逻辑表达式:(type ∈ ['knows','like','follows']) OR (无last_used) OR (last_used > 2021-09-07T10:04:05Z)
对应上面的反例:顶点type是knows但last_used为2020年,依然符合第一个规则,会被保留。


等效写法参考

如果希望单or写法和双or独立写法效果一致,需要用and嵌套两个or:

g.V(1).in('linked_to', 'used_by')
 .and(
    or(has('type', 'knows'), has('type', 'like'), has('type','follows')),
    or(hasNot('last_used'), has('last_used',gt(datetime('2021-09-07T10:04:05.000Z'))))
  )
 .out('linked_to', 'used_by')
 .dedup()

内容的提问来源于stack exchange,提问作者Lucas Dresl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:15:04