Używam pymongo do aktualizacji zbiorczej.
Lista nazwisk poniżej jest odrębna lista nazw (każda nazwa może mieć mutiple dokumentów w kolekcji)Aktualizacja zbiorcza jest zbyt powolna.
Kod 1:
bulk = db.collection.initialize_unordered_bulk_op()
for name in names:
bulk.find({"A":{"$exists":False},'Name':name}).update({"$set":{'B':b,'C':c,'D':d}})
print bulk.execute()
Kod 2:
bulk = db.collection.initialize_unordered_bulk_op()
counter = 0
for name in names:
bulk.find({"A":{"$exists":False},'Name':name}).update({"$set":{'B':b,'C':c,'D':d}})
counter =counter + 1
if (counter % 100 == 0):
print bulk.execute()
bulk = db.collection.initialize_unordered_bulk_op()
if (counter % 100 != 0):
print bulk.execute()
Mam 50000 dokumentów w mojej kolekcji. Jeśli pozbędę się licznika i instrukcji (kod 1), kod utknie! W przypadku instrukcji if (Code 2) zakładam, że operacja ta nie powinna zająć więcej niż kilka minut, ale zajmuje więcej niż to! Czy możesz mi pomóc szybciej to zrobić, czy nie mam racji w moim założeniu ?!
Dzięki za pomoc, ale myślę, że czasy, które zostały podane powyżej nie są prawidłowe, ponieważ nie są do 10000 dokumentów, ale tylko połowa z nich (biorąc pod uwagę> 0,5 <= 0,5 są jednakowo prawdopodobny). Pomogłoby to również, gdybyś mógł pokazać, jak indeksowałeś pola A i imię dla początkującego. Dzięki jeszcze raz! – amazingCodingExperience
Ponadto, w jaki sposób indeksowanie umocni proces? Czy możesz podzielić się teorią za tym? – amazingCodingExperience
Dodano więcej informacji do mojej odpowiedzi. Jednak mongodb oferuje całkiem dobre kursy online za darmo: https://university.mongodb.com/courses/M101P/about Proponuję wziąć jeden z nich, aby przyspieszyć z mongo. – squanto773