Как вторая версия может быть оптимизацией по сравнению с первой?
Ваш первый запрос получает одно число с сервера MongoDB: общее количество результатов запроса.В то время как ваша вторая версия извлекает все соответствующие документы, а вы выполняете подсчет на стороне «клиента».
Поверьте мне, MongoDB может внутренне подсчитывать полученные документы так же быстро, как вы могли бы в вашем клиенте Go.Чтобы сервер MongoDB отправлял результаты, извлекал их и демонтировал их на клиенте, требуется на порядки больше времени (в зависимости от множества факторов).
Обратите внимание, что если у вас есть составной индекс, содержащий "iden"
и"name"
, даже если вы добавите больше фильтров (например, "created"
в вашем примере), индекс все равно можно будет использовать, но MongoDB придется перебирать частичные результаты, чтобы применить остальную часть запроса.Чтобы выяснить, используется ли индекс, выполните следующую команду:
db.Collection.find(
{"iden": "343754856", "name": "alan", "created": {"$gt": ....}
).explain()