如何检查数组属性是否包含某个值?

问题描述 投票:0回答:2

我有一个有两个顶点的图,每个顶点都包含一个名为

interests
的属性,它是一个字符串数组。我想比较两个数组共有多少个字符串,以及数组是否包含某个字符串。

我试过以下查询,但它抛出一个错误:

SELECT * FROM cypher('QuirkyMatch', $$
        MATCH (v:Person), (user:Person)
        WHERE user.name = 'Sarah' AND v.age > (user.age + 1) AND v.interests CONTAINS 'Art'
        RETURN v
$$) as (potential_match agtype);

ERROR:  agtype string values expected

这是我创建它们的方式:

SELECT * FROM cypher('QuirkyMatch', $$
    CREATE (:Person {
        name: 'Alex',
        age: 27,
        occupation: 'Graphic Designer',
        interests: ['Art', 'Photography', 'Traveling', 'Indies Music'],
        weird_fact: 'I can hold up to 400 straws in my mouth. LOL.'
    }), 
    (:Person {
        name: 'Sarah',
        age: 25,
        occupation: 'Software Engineer',
        interests: ['Hiking', 'Board Games', 'Sci-Fi Movies', 'Dungeons & Dragons', 'Painting', 'Art'],
        weird_fact: 'I collect hot sauces and I have over 50 different ones :)'
    })
$$) as (v agtype);
postgresql cypher apache-age
2个回答
0
投票

您可以对数组使用 IN 运算符。这是实现所需输出的方法。

SELECT * FROM cypher('new', $$
        MATCH (v:Person), (user:Person)
        WHERE user.name = 'Sarah' AND v.age > (user.age + 1) AND ('Art' IN v.interests)
        RETURN v
$$) as (potential_match agtype);

0
投票

尝试使用

IN
关键字代替。

SELECT * FROM cypher('QuirkyMatch', $$
    MATCH (v:Person), (user:Person)
    WHERE user.name = 'Sarah' AND v.age > (user.age + 1) AND 'Art' IN v.interests
    RETURN v
$$) as (potential_match agtype);

这个答案100%是我自己的作品。

© www.soinside.com 2019 - 2024. All rights reserved.