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

#neo4j #cypher

Вопрос:

Мне нужно отсортировать узлы по createdAt метке времени в порядке убывания. Это необязательный параметр. Есть старые узлы, у которых нет этого параметра. Когда я пытаюсь отсортировать, как предложено в документе neo4j:

 MATCH (node:MyTag)
WHERE ...
RETURN node
ORDER BY node.createdAt DESC
 

Я получаю узлы, которых createAt не существует, до тех, где они существуют. Как я могу сначала получить узлы, которые были созданы в порядке убывания, а затем иметь узлы, у которых нет поля createAt?

Овации

Ответ №1:

Вы можете добавить поле в свой ВОЗВРАТ

 COALESCE ( node.createdAt, 999999999) AS sortField
 

это дало бы вам ценность для сортировки.

Комментарии:

1. Мы не уверены, что 999999999 достаточно велик, чтобы быть в конце сортировки. Не так ли? Это значение метки времени в datetime равно 9 сентября 2001 года по Гринвичу.

2. Хорошо.. идея не зависит от точного значения. Идея состоит в том, чтобы использовать столбец с предсказуемым значением вместо нулей, чтобы вы могли влиять на порядок.

3. Отмечено при подаче идеи. Не давать 100% правильного ответа не идеально.

4. в итоге я пошел с COALESCE ( node.createdAt, 0) AS sortField

5. Хорошо. Я думаю, что это подтверждает мой ответ 😉