Приведенный ниже код упростил мне использование Pymongo.
Но я пытаюсь его реорганизовать, потому что считаю это слишком неэффективным.
Так как я новичок, я пробовал несколько раз, но меня это не удовлетворило, поэтому мне нужен совет.
Мне очень жаль, что код запутан. Просто обратитесь к нему,
и дайте мне знать, есть ли какие-нибудь библиотеки или простой пример. Спасибо!
def find_(self, collection, find_value=None, projection=None, sort=None, skip=None, limit=None, multi_array=None, cursor=False):
if sort is None:
if skip is None and limit is None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection)
if skip is not None and limit is None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).skip(skip)
if skip is None and limit is not None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).limit(limit)
if skip is not None and limit is not None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).skip(skip).limit(limit)
else:
arg = tuple((key, val) for key, val in sort.items())
if skip is None and limit is None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg)
if skip is not None and limit is None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).skip(skip)
if skip is None and limit is not None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).limit(limit)
if skip is not None and limit is not None:
cursor_result = self.db_path[collection].find(find_value if projection is None else find_value, projection).sort(arg).skip(skip).limit(limit)
Я считаю маловероятным, что это источник каких-либо проблем с производительностью, которые могут у вас возникнуть. Читаемость? Ремонтопригодность? Вероятно, есть какие-то возможности для улучшения. Но с производительностью? Любые улучшения, которые вы могли бы внести в это, будут на микроуровне. При оптимизации для скорости общее правило состоит в том, что если вы не удвоите скорость, вы ничего не добьетесь. У вас, наверное, не получится здесь удвоить скорость.
find_value, если проекция - None else find_value, projection -> retuns (find_value) или (find_value, projection) спасибо
Хорошо. Спасибо. Мне удобно пользоваться кодом. Но код, который я сделал, показался мне настолько плохим, что я спросил.






Ваш код настолько эффективен, насколько это возможно, поскольку cursor_result всегда задается ровно одной веткой, в которой выполняется вся реальная работа. Единственная проблема в том, что у него есть много дублированного кода. Вы можете выделить его, обрабатывая каждый вариант по отдельности.
def find_(self, collection, find_value=None, projection=None, sort=None, skip=None, limit=None, multi_array=None, cursor=False):
# Get the right path and call find
cursor_result = self.db_path[collection].find(find_value, projection)
# Sort if necessary
if sort is not None:
cursor_result = cursor_result.sort(tuple(sort.items()))
# Skip if necessary
if skip is not None:
cursor_result = cursor_result.skip(skip)
# Limit if necessary
if limit is not None:
cursor_result = cursor_result.limit(limit)
Большое тебе спасибо!!. Это легко увидеть, и это работает. Сам я бы об этом не подумал. Было бы здорово, если бы рядом со мной был такой человек, как ты. Спасибо.
find_value if projection is None else find_valueпредставляет собой всегдаfind_value; там опечатка?