Поддерживающий Mongoengine здесь - по умолчанию (и исторически) mongoengine кэширует все результаты набора запросов во время его итерации.Это дает преимущество в том, что вы не запускаете запрос, если вы повторяете одну и ту же переменную, но имеет недостаток - хранить все в памяти.То есть:
class User(Document):
pass
users = User.objects() # users is a queryset, it didn't hit the db yet
_ = [us for us in in users] # hits the db and caches all user instances in the users object
_ = [us for us in in users] # does not hit the db anymore, user the users cached data
users = User.objects().no_cache()
_ = [us for us in in users] # hits the db and caches all user instances
_ = [us for us in in users] # hits the db again
Звучит неплохо, если вы используете кеш, но на практике вы редко выполняете итерацию по одному и тому же набору запросов 2 раза, и потребление памяти может стать проблемой, если вы выполняете итерации по очень большим коллекциям.
Обратите внимание, что в будущем он может измениться на использование версии no_cache
по умолчанию