【问题标题】:Switching Collections and saving in Flask-Mongoengine在 Flask-Mongoengine 中切换集合和保存
【发布时间】:2015-10-04 00:13:27
【问题描述】:

我在将文档保存到新集合然后从旧集合中删除时遇到问题。 我像这样创建一个新对象:

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 一起使用。

有人有想法吗? 非常感谢。

【问题讨论】:

    标签: python flask mongoengine flask-mongoengine


    【解决方案1】:

    我看到这是个老问题,但也许有人有同样的问题。我认为这是因为当您有一个设置了 id 的文档时,通过调用 t.save() 您只会更新集合中的现有文档。要真正保存它,您需要致电t.save(force_insert=True)

    【讨论】:

      【解决方案2】:

      您是否遇到任何错误?它对我有用。检查您的 mongo db 集合中的记录。

      mongoengine docs 的一个可能原因:

      “在使用上下文管理器之前,请确保所有别名都已通过 register_connection() 或 connect() 注册。”

      【讨论】:

      • 不,我没有收到任何错误,我认为这是 mongoengine 0.10 的问题,因为我刚刚降级到 0.09 并且它们正确保存。不过,查询该集合是另一回事..
      猜你喜欢
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-19
      • 1970-01-01
      • 2014-08-16
      • 1970-01-01
      相关资源
      最近更新 更多