Hey James,
Apologies for the late reply. This came in when I was out of town and it got lost in the email shuffle.
It looks to me like the problem is that you don't have date in your "$project" operator.
FWIW, my approach is to start in the mongo shell, getting the queries correct. Once I'm confident that it's constructed correctly, then I'll bring it into whatever technology I'm working with (CF, etc).
For debugging a query that you issue from CF, you can do two things:
1. in your database, turn on profiling: db.setProfilingLevel(2), which will log all queries. you can then look at them via db.system.profile.find()
2. when you issue an aggregation in cfmongodb, you can then do writeDump( result.getCommand() ); which will dump the aggregation command that was sent to mongodb. I use that if I suspect that my original command is correct but something in cfmongodb or cf itself is mucking up the works (which is rare).
Cheers,
Marc