one way is to have a view_stats collection, as you say. on each view of an image, $inc a counter in a particular doc in view_stats. you might for example have a doc per image per hour. or you could have the hours as an array or subobject. to keep it simple imagine something like
{ image: <imageid>, hour : <hoursinceepoch>, views : <number> }
you can then periodically run a map/reduce job which outputs to some collection such as most_viewed_today. then anytime needed you query that collection. the stats don't need to be instantly up to date (typically) so you can run the map/reduce periodically -- maybe once per 5 minutes.