根据值列表匹配节点值的Cypher查询

izkcnapc  于 2022-10-01  发布在  其他
关注(0)|答案(1)|浏览(147)

我正在尝试编写一个查询,其中一个DNS CNAME记录指向一个不存在的资源(在我的例子中是S3存储桶)。其想法是将所有不同的S3存储桶名称收集为一个列表。然后选择具有指向存储桶名称的值的cname记录。如果CNAME值指向的存储桶名称不在我们的列表中,则返回结果。

这方面的一个示例记录是:

test.random-domain.link. 300 IN CNAME   s3.us-east-2.amazonaws.com/non-existent-bucket.link/index.html.

我的查询与我的帐户中存在的每个其他S3存储桶相匹配,并且我不能以仅当CNAME中定义的对应存储桶不存在时才返回TRUE的方式来编写它。

有人能帮我修改我的查询以获得合适的结果吗?

aelbi1ox

aelbi1ox1#

试试这个:

MATCH (A:AWSAccount)-[R1:RESOURCE]->(C:S3Bucket) WHERE A.id = "{ACCNTID}" 
WITH A, collect(DISTINCT C.name) as existingBuckets
MATCH (A)-[R2:RESOURCE]->(B:AWSDNSRecord) WHERE B.type = 'CNAME' and left(B.value, 2) = 's3'
WITH A, existingBuckets, B, split(B.value, '/')[1] AS bucketPointedByDNS
WHERE NOT bucketPointedByDNS IN existingBuckets
RETURN A, B

相关问题