added KeyValueDataSource and refactored MongoDataSource