Превключване на колекции и запазване в Flask-Mongoengine

Имам проблем със запазването на документи в нова колекция и след това с изтриването им от старата. Създавам нов обект така:

class Test(mongo.Document):
     field = mongo.StringField()

t = Test(field="test")
t.switch_collection('default')
t.save()
t.switch_collection('switched')
t.save()
t.switch_collection('default')
t.delete()

Изглежда само извършва първото записване в колекцията по подразбиране и след това не изпълнява нищо след това. Играх си с куп опции за разлика, като презареждане на обекта след всяко превключване/запазване и от контекстни мениджъри на mongoengine:

with switch_collection(Test, 'mongoswitch') as test:
    test(field="switch").save()

Моите mongo настройки изглеждат така (първо се извикват):

 app.config["MONGODB_SETTINGS"] = {'db': 'TestDB'}
 mongo = MongoEngine(app)

Използване на mongoengine 0.10 и pymongo 2.8.1 с Python 3.4.

Някой има ли идея? Много благодаря.


person austin_ce    schedule 15.07.2015    source източник


Отговори (2)


Виждам, че въпросът е стар, но може би има някой със същия проблем.. Мисля, че това е така, защото когато имате документ, който има id набор, като извикате t.save(), вие само актуализирате съществуващ документ в колекцията. За да го запазите наистина трябва да се обадите на t.save(force_insert=True)

person jiripi    schedule 05.11.2019

Получавате ли грешки? Беше ми подействало. Проверете записите във вашите колекции mongo db.

Една възможна причина от документи на mongoengine:

„Уверете се, че всички псевдоними са регистрирани с register_connection() или connect(), преди да използвате контекстния мениджър.“

person Rajesh Kaushik    schedule 17.07.2015
comment
Не, не получавам никакви грешки, смятам, че това е проблем с mongoengine 0.10, тъй като току-що понижих до 0.09 и те записват правилно. Запитването за тази колекция обаче е различна история.. - person austin_ce; 20.07.2015