Как обновить Mongo-документ после его вставки?
Предположим, я вставляю документ.
post = { some dictionary } mongo_id = mycollection.insert(post)
Теперь, допустим, я хочу добавить поле и обновить его. Как мне это сделать? Кажется, это не работает …..
post = mycollection.find_one({"_id":mongo_id}) post['newfield'] = "abc" mycollection.save(post)
- Обновление Pymongo: возможно ли вставить поле с '$ currentDate' только один раз?
- Это занимает много времени … как ускорить этот словарь? (Python)
- Как сделать больше или меньше, чем использовать MongoDB?
- Удаление частичных данных в mongoDB
- Есть ли ограничение на количество таблиц, которые может иметь база данных PostgreSQL?
В pymongo вы можете обновить:
mycollection.update({'_id':mongo_id}, {"$set": post}, upsert=False)
Параметр Upsert будет вставляться вместо обновления, если сообщение не будет найдено в базе данных.
Документация доступна на сайте mongodb .
UPDATE Для версии> 3 используйте update_one вместо обновления :
mycollection.update_one({'_id':mongo_id}, {"$set": post}, upsert=False)
Я буду использовать collection.save(the_changed_dict)
таким образом. Я только что проверил это, и он по-прежнему работает для меня. Ниже приводится цитата из pymongo doc.
:
save(to_save[, manipulate=True[, safe=False[, **kwargs]]])
Сохраните документ в этой коллекции.
Если to_save уже имеет «_id», то выполняется операция update () (upsert), и любой существующий документ с этим «_id» перезаписывается. В противном случае выполняется операция insert (). В этом случае, если манипулировать True, в to_save будет добавлен «_id», и этот метод вернет «_id» сохраненного документа. Если манипулировать False, «_id» будет добавлен сервером, но этот метод вернет None.
Это старый вопрос, но я наткнулся на это, когда искал ответ, поэтому я хотел бы дать обновление для ответа.
Способы сохранения и обновления устарели.
save (to_save, manipulate = True, check_keys = True, ** kwargs) ¶ Сохраните документ в этой коллекции.
DEPRECATED – вместо этого используйте insert_one () или replace_one ().
Изменено в версии 3.0: Удален безопасный параметр. Pass w = 0 для неподтвержденных операций записи.
update (spec, document, upsert = False, manipulate = False, multi = False, check_keys = True, ** kwargs) Обновить документ (ы) в этой коллекции.
DEPRECATED – вместо этого используйте replace_one (), update_one () или update_many ().
Изменено в версии 3.0: Удален безопасный параметр. Pass w = 0 для неподтвержденных операций записи.
в конкретном случае OPs лучше использовать replace_one .
Согласно последней документации о PyMongo под названием « Вставить документ» (вставка устарела) и после защитного подхода вы должны вставить и обновить следующее:
result = mycollection.insert_one(post) post = mycollection.find_one({'_id': result.inserted_id) if post is not None: post['newfield'] = "abc" mycollection.save(post)
- Что вызывает «неспособность подключиться к источнику данных» для pyodbc?
- Список пользователей для определенной базы данных с помощью PyMongo
- Структура данных для базы данных текстовых материалов
- Mongo: объединение AND и OR
- Лучшая база данных DataMining
- Pymongo $ addToSet не работает
- Почему я получаю эту ошибку в монгольском запросе?
- Как преобразовать int в базу 9, без 0?
- Как сопоставить один класс с несколькими таблицами с SQLAlchemy?