Как эффективно запрашивать и обновлять записи в MongoDB (Pymongo)?

#python #python-3.x #mongodb #pymongo #pymongo-3.x

#python #python-3.x #mongodb #pymongo #pymongo-3.x

Вопрос:

У меня есть функция, в которой, если я передам an MongoDB.Collection.Object , она может или не может дать мне вектор [1,2,3,4...] . Прежде всего, мне нужно извлечь все необходимые запросы, а затем обновить записи на основе каждого. Проблема в том, что у меня есть такая функция:

 def return_vector(q):
  # condition = my_logic
  if condition:
    return vector
  else:
    return None'

for q in db.coll_name.find({'a.b.c':{'$gt':0.4}}):
  vector = return_vector(q)
  if q:
    db.coll_name.update({'_id': q['_id']},{'$set': {'vector_v1': vector}})
 

Проблема? Это занимает слишком много времени. Как я должен эффективно это делать оптимизированным способом?

Комментарии:

1. Извините, у меня это не сработало. Мне пришлось попросить ребят из узла справиться с этим. Тем не менее, спасибо за предложение.

2. Np, спасибо за повторное развертывание

Ответ №1:

Вы выполняете несколько обновлений. Это может быть одной из причин медлительности.

Вы можете объединить несколько обновлений и отправить один запрос на сервер, используя. bulkwrite Это значительно сократило бы время обхода сети.

Надеюсь, у вас нет нескольких запросов на запись для одного и того же документа одновременно.

Комментарии:

1. Не могли бы вы написать фиктивный код для этого? Я думаю find() , или arrgegate было бы полезно здесь. в любом случае, мне в любом случае придется писать один за другим. Я не могу многократно записывать. Могу ли я?

2. Я предлагаю вам bulkWrite , поскольку вам нужно обновить.