Преобразование типов данных 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.