The first thing I'd usually do in such a situation is (considering I have enough logging), run a stress test to see what all routes are giving me a problem. Once that's done, I see what do the fast ones have which the slow ones don't and vice-versa.
What exactly do you mean by "huge" MongoDB operations? How is your database connected to your server instance? Is it in the same subnet? Or it's a hosted service?
For client-side caching, I'd suggest you use ETags and then use the If-None-Match header when in the request.
You need to give us a little more information on your setup for us to help you. I am more than willing to update this information if you give me some specifics about the infrastructure.