Creating date nodes by looping through a start date and an end date

What do you mean by this? It's not manual work, and it is one of only two ways to efficiently handle lists. Avoiding UNWIND and collect is not a viable strategy in Neo4j, or any graph database.

That said, I'll admit that I struggled most with understanding those, than almost anything else, when I started learning Neo4j and Cypher. My personal favorite thread about it:
Cypher grammer, syntax, and documentation -- List, Collect, avg, etc are impenetrable to me - #5 by tony.chiboucas.

Your problem should be solved with creating, and unwinding, a list

Also, date, datetimes, and durations are similarly confusing. Here's some useful references for working with date and times:

WITH date("1985-01-01") AS startDate, date("1985-01-20") AS endDate
WITH startDate, endDate, range(0, duration.inDays(startDate, endDate).days) as dayDiffList
UNWIND dayDiffList AS dayDiff
WITH (startDate + duration({days: dayDiff})) as date RETURN date

...that will get you a list of dates, with which you can do whatever you want, like create nodes, and query or order results by date.

WITH date("1985-01-01") AS startDate, date("1985-01-20") AS endDate
WITH startDate, endDate, range(0, duration.inDays(startDate, endDate).days) as dayDiffList
UNWIND dayDiffList AS dayDiff
WITH (startDate + duration({days: dayDiff})) as dateVal
MERGE (:DateEntry {date: dateVal})
MATCH (d:DateEntry) 
WHERE d.date > date("1985-01-5")
RETURN d.date ORDER BY d.date DESC
1 Like