Преобразование типов данных Neo4J Cypher

У меня есть свойство quantity на наших Product -nodes и я ищу сделать запрос cypher, который дает мне все узлы с quantity = 20... проблема в том, что количество хранится как строка в neo4j, Есть ли способ передать свойство integer в запрос cypher?

// This fails to find the required nodes
MATCH (p:Product) WHERE p.quantity = 20;

// This finds them
MATCH (p:Product) WHERE p.quantity = "20";

// I would like to do this
MATCH (p:Product) WHERE INT(p.quantity) = 20;

PS: это действительно упрощенная утилита, у нас действительно нет продуктов и величин, но они просто сталкиваются с существующими данными neo4j, которые имеют целые значения, хранящиеся в виде строк, и мы хотели бы сделать несколько совпадений для этих строк

Ответ 1

Вы можете сделать это наоборот.

MATCH (p:Product) WHERE p.quantity = str(20) RETURN p;

также должен работать с параметрами.

MATCH (p:Product) WHERE p.quantity = str({quantity}) RETURN p;

или даже с совпадением свойств inline

MATCH (p:Product {quantity : str({quantity})}) RETURN p;

Ответ 2

MATCH (p:Product) WHERE toInt(p.quantity) = 20;

Ответ 3

Я тоже столкнулся с этой проблемой раньше. Насколько я узнал, сделать это преобразование невозможно прямо в cypher. Я использовал небольшую Java script (используя стандартный Java API) для изменения типов данных хранимых значений. Это было пару месяцев назад, поэтому, возможно, это изменилось с версией 2.0.