Вы не получите никакой выгоды от этого уровня кэширования, если ваш код и база данных не будут иметь исключительно плохую производительность (в этом случае у вас больше проблем, чем при настройке кэша).
Вы можете использовать JSON в качестве ключа в любом хранилище ключей / значений, хотя, вероятно, имеет смысл использовать хэш в качестве ключа кэша, а не напрямую использовать строку JSON, и непостоянный кэш в памяти с memcached или Redis будет работать намного лучше, чем полная база документов, такая как MongoDB.
Когда вы столкнетесь с большими проблемами при таком подходе, это управление истечением срока действия кэша - чтобы получать обновления в реальном времени, вам нужно точно знать, на какие объекты в кэше влияет изменение данного объекта. Это легко, если запрос простой по идентификатору, но почти невозможно в сценарии, который вы описали.
Другим способом управления кешем является истечение срока действия - удаление объектов из кеша через определенное время. Это предполагает, что допустимо показывать устаревшие данные после обновления. Кэши обычно имеют встроенную поддержку истечения срока действия. Базы данных, как правило, не поддерживают.