Я пытаюсь выполнить ряд операций обновления в моей MongoDB. Я хотел использовать операцию массового обновления, указанную здесь, но это не работает для меня, используя pymongo. Мой код выглядит следующим образом
import pymongo
client = pymongo.MongoClient()
db = client.test
bulk = db.testCol.initialize_unordered_bulk_op();
bulk.find({"_id":"1,1,1"}).update({"$set":{"attr1":1, "attr2":"X", "attr3":99}})
print bulk.execute()
Результат этого:
{'nModified': 0, 'nUpserted': 0, 'nMatched': 1, 'writeErrors': [], 'upserted': [], 'writeConcernErrors': [], 'nRemoved': 0, 'nInserted': 0}
Насколько я понимаю, Mongo находит документ (nMatched=1), но не обновляет его (nModified=0). Я не могу понять, почему он это делает.
Когда я выполняю операцию вручную, без использования Bulk, вывод кажется правильным, и запись изменяется в соответствии с запросом. Код:
import pymongo
client = pymongo.MongoClient()
db = client.test
print db.testCol.update({"_id":"1,1,1"}, {"attr1":1, "attr2":"X", "attr3":99})
Это действительно работает, что подтверждается как печатью, так и содержимым базы данных.
{'updatedExisting': True, u'nModified': 1, u'ok': 1, u'n': 1}
Я не могу понять, что я делаю неправильно. Насколько я могу судить, я следовал правильной процедуре выполнения массовых обновлений.
$set
, то это не обновление. Новый API распознает это, в отличие от устаревшего ответа о проблеме записи, и сообщает, что документ обновлен. - person Neil Lunn   schedule 03.07.2014