Регулярное выражение для строки имени свойства в Cypher

Я знаю, что можно использовать регулярные выражения для значений свойств, например:

      MATCH (n)
WHERE n.SomeProperty =~ 'somestring*'
RETURN n;

Я хочу использовать регулярное выражение для имени свойства и проверять все свойства, которые начинаются с определенной строки, например:

      MATCH (n)
WHERE n.`SomeProperty*` > 10
RETURN n;

Поэтому я хочу, чтобы все узлы имели свойство, начинающееся с «SomeProperty», и имели значение > 10 для этого свойства.

Это невозможно с использованием регулярных выражений, как в моем примере. Я пробовал это, и с моими исследованиями я не смог найти решение. Есть ли у кого-нибудь идея, как добиться этого, используя другую технику?

2 ответа

Учитывая следующий тестовый график

      CREATE (:TestNode {somePropertyOne: 10})
CREATE (:TestNode {somePropertyTwo: 11})
CREATE (:TestNode {somePropertyThree: 12})
CREATE (:TestNode {someOtherProperty: 13})

Следующий запрос достигает того, что вы хотите

      MATCH (n)
WHERE ANY(x IN keys(n) WHERE x STARTS WITH 'someProperty' AND n[x] > 10)
RETURN n

╒════════════════════════╕
│"n"                     │
╞════════════════════════╡
│{"somePropertyTwo":11}  │
├────────────────────────┤
│{"somePropertyThree":12}│
└────────────────────────┘

Имейте в виду, что на самом деле это не оптимизированный запрос для графиков, поэтому он будет медленным для баз данных приличного размера.

Я создал образцы узлов, как показано ниже:

      Create (n1:RexNode {someproperty10: 10}),
   (n2:RexNode { someproperty11: 11}),
  (n3:RexNode {someproperty12: 12})

Затем я использовал этот запрос для возврата n2 и n3. Как видите, n1 начинается с некоторого свойства, но его значение не превышает 10. Квантификатор — ЛЮБОЙ, поэтому он будет искать хотя бы одно свойство (ключ узла n) и возвращать его.

      MATCH (n)  
WITH n  
   WHERE 
     ANY( k in  keys(n) 
          WHERE k STARTS WITH 'someproperty' 
            AND n[k] > 10
        )
RETURN n

Результат:

      ╒═════════════════════╕
│"n"                  │
╞═════════════════════╡
│{"someproperty11":11}│
├─────────────────────┤
│{"someproperty12":12}│
└─────────────────────┘
Другие вопросы по тегам