提问参考模版:
-
nebula 版本:v2.0.1
-
部署方式(分布式 / 单机 / Docker / DBaaS):分布式
-
是否为线上版本:Y
-
问题的具体描述
Neo4j 转Nebula, 原先的业务里面有几个语句,不太好转,语句如下
MATCH p = (self:Company)<-[sr:ACTUAL|CONTROL]-(target) WHERE self.keyNo = "aaa" RETURN CASE target.status WHEN '存续' THEN 0 ELSE 8 END AS status, target, collect(p) AS path, 'C' AS nodeType, CASE type(sr) WHEN 'ACTUAL' THEN 0 ELSE 1 END AS type ORDER BY status, type SKIP 0 LIMIT 10
现在想到了这里
go from -6732559126034379613 over Legal, Invest Reversely yield CASE $$.Company.shortstatus WHEN '存续' THEN 0 ELSE 8 END AS status, $$.Company.keyno, $$.Company.name, "C" as nodeType, Legal._type, CASE Legal._type < 0 WHEN true THEN 0 ELSE 1 END AS type | ORDER BY status, type | LIMIT 0, 10
有几个问题不知道怎么解决, 有没有更好的写法:
- target 有两种类型,有一个没有status 字段,这个表示会有点奇怪,缺少更具体的表达,后续需要业务代码处理
- OpenCypher 里面的case type(sr) 不知道该怎么表示,毕竟Go 里面没有关系没有type, 用Legal._type 毕竟很奇怪,这个值 我和NULL,EMPTY 比较都没有值,很奇怪 如果类型为Invest,
CASE Legal._type 应该怎么比较
+--------+------------------------------------+----------------------------+----------+-------------+--------------+------+
| status | $$.Company.keyno | $$.Company.name | nodeType | Legal._type | Invest._type | type |
+--------+------------------------------------+----------------------------+----------+-------------+--------------+------+
| 0 | "1326546545455444444789978797/961" | "清华大学资产管理有限公司" | "C" | | -71 | 1 |
+--------+------------------------------------+----------------------------+----------+-------------+--------------+------+
| 8 | | | "C" | -72 | | 0 |
+--------+------------------------------------+----------------------------+----------+-------------+--------------+------+