Dear Haoran Zhang,
Thank you for your interest.
You don't have to implement a proxy server between Tajo and MongoDB.
Tajo provides two interfaces to support various storages.
One is 'Scanner' which processes one tuple per a call. It resets cursor at initialization phase.
Per each call, it reads a tuple by given schema from a specific storage and move a cursor to point next tuple.
Other one is 'Appender' which writes a given tuple to underlying storage, flushes buffered tuples and calculates stats such as accumulating number of written tuples.
It also operates tuples one by one like Scanner, that is, the main difference is reading and writing.
Currently, already various storages have been implemented using above interfaces. You can see it at tajo-storage module as following:
Please feel free to ask anything to us.