Интересно, почему мой питон говорит, что метод mongoengine save () устарел? Я не вижу никакой информации об этом в официальной документации https: // mongoengine. readthedocs.io/en/v0.9.0/apireference.html

class MyModel(Document):
    user_id = StringField(required=True)
    date = DateTimeField(required=True, default=datetime.datetime.now)

my = MyModel()
my.user_id = 'user'
my.save()

И теперь я вижу:

/Library/Python/2.7/site-packages/mongoengine/document.py:340: DeprecationWarning: сохранение не рекомендуется. Вместо этого используйте insert_one или replace_one

У меня есть Python 2.7, а также установлены Pymongo, MongoEngine и Bottle-Mongo (может быть, некоторые проблемы с этим?)

1
Dmitriy Apollonin 19 Мар 2017 в 19:35

2 ответа

Лучший ответ

MongoEngine обертывает PyMongo, что в PyMongo 3.0 не рекомендуется «сохранять»:

http://api.mongodb.com/python/current/changelog.html#collection-changes

MongoEngine может потребоваться отменить свой метод сохранения или отменить предупреждение об устаревании, или, возможно, какое-то другое исправление для обработки этого изменения PyMongo. Я рекомендую вам найти средство отслеживания ошибок MongoEngine и сообщить об этой проблеме, если это еще не было.

Ошибка MongoEngine - https://github.com/MongoEngine/mongoengine/issues/1491

2
Sagar Veeram 19 Мар 2017 в 18:22

Используя col.replace_one({‘_id': doc['_id']}, doc, True) вместо этого.

API - это replace_one(filter, replacement, upsert=False, bypass_document_validation=False, collation=None, session=None).

Использование upsert = True для вставки нового документа, если filter ничего не находит.

1
highway 15 Мар 2019 в 09:42