Neo4j中Cypher用WITH多条件过滤JSON标签返回空问题咨询
问题原因
你当前的过滤逻辑和JSON结构不匹配:示例JSON里value.tags下的每一项都是由多个单字段对象组成的数组,不存在同时包含category和thirdParty字段的单个对象,所以对单个tag同时判断两个字段存在的条件永远不成立,组合过滤自然返回空结果。
修复方案
你需要先将每个标签组内的字段合并为同一个对象,再做条件判断,修复后的Cypher代码如下:
CALL apoc.load.json("file:///full.json") YIELD value WITH ['Gambling','Subscription TV','Telecommunications'] AS targetList, value UNWIND value.tags AS tagGroup // 合并标签组内的所有字段到同一个对象 WITH targetList, apoc.map.mergeList(tagGroup) AS mergedTag // 过滤同时满足两个条件的对象 WHERE mergedTag.category IN targetList AND mergedTag.thirdParty IS NOT NULL RETURN mergedTag
逻辑说明
- 用
apoc.map.mergeList函数把每个标签组(tagGroup)里的所有单字段对象合并为一个对象,合并后同一个标签组的category和thirdParty字段会落到同一个对象上 - 合并后再做组合条件过滤即可拿到符合要求的结果
如果不需要保留合并后的结构,只是要筛选符合要求的原始标签组,也可以用下面的写法:
CALL apoc.load.json("file:///full.json") YIELD value WITH ['Gambling','Subscription TV','Telecommunications'] AS targetList, value UNWIND value.tags AS tagGroup WHERE any(tag IN tagGroup WHERE tag.category IN targetList) AND any(tag IN tagGroup WHERE tag.thirdParty IS NOT NULL) RETURN tagGroup
内容的提问来源于stack exchange,提问作者ZXwwww
相关产品推荐
相关产品推荐

