У меня есть база данных Neo4j, и я хочу найти в любых узлах любые свойства, строковые значения которых заканчиваются на «.0».
Итак: для всех строковых свойств в базе данных, независимо от меток, я хочу найти те, которые содержат хотя бы одно значение, оканчивающееся на «.0». Желаемое возвращаемое значение — это список имен свойств.
Можно ли сделать это с помощью запроса Cypher?
Вы можете использовать следующий запрос Cypher. Обратите внимание, что это очень неэффективно, и этот запрос рекомендуется ТОЛЬКО для баз данных размера small
.
CALL db.propertyKeys() YIELD propertyKey
MATCH (n) WHERE n[propertyKey] ENDS WITH '.0'
RETURN n
Если вы хотите заранее отфильтровать MATCH
только с ключами свойств типа STRING, вы можете использовать следующий запрос
CALL db.schema.nodeTypeProperties()
YIELD propertyName, propertyTypes
WHERE "String" IN propertyTypes
WITH propertyName AS propertyKey
MATCH (n) WHERE n[propertyKey] ENDS WITH '.0'
RETURN n
Это возвращает отдельные имена свойств, значение которых (в любом узле) заканчивается на «.0»:
MATCH (n)
UNWIND KEYS(n) AS propName
WITH propName
WHERE n[propName] ENDS WITH '.0'
RETURN DISTINCT propName
Временная сложность равна O(N)
, где N
— количество узлов.
Этот запрос проверяет только те свойства, которые действительно существуют в каждом узле (вместо проверки каждого узла на наличие всех свойств, которые существуют в любом узле или связи).
плюс один, хоть кто-то правильно прочитал вопрос :roll-eye"
Что-то, с чего вы можете начать: сопоставить(я) с s, свойства(я) как propMap, вернуть elementId(s) как узел, [ x в ключах(propMap), где propMap[x] равен ::STRING и propMap[x] заканчивается на ".0" | {key: x, value: propMap[x]} ] как предел попадания 1