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:
- date, datetimes, and durations
- Temporal functions for instants (date, datetime, etc.)
- Temporal functions for durations
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