#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
, поскольку вам нужно обновить.