【问题标题】:Switch collection in mongoengine for find query在 mongoengine 中切换集合以进行查找查询
【发布时间】:2014-11-02 10:49:51
【问题描述】:

我已阅读有关切换集合以保存文档的 mongoengine 文档。并测试此代码并成功运行:

from mongoengine.context_managers import switch_db

class Group(Document):
    name = StringField()

Group(name="test").save()  # Saves in the default db

with switch_collection(Group, 'group2000') as Group:
    Group(name="hello Group 2000 collection!").save()  # Saves in group2000 collection

但问题是当我想在开关集合中找到保存的文档时,switch_collection 根本不起作用。

with switch_collection(Group, 'group2000') as GroupT:
    GroupT.objects.get(name="hello Group 2000 collection!")  # Finds in group2000 collection

【问题讨论】:

  • 您可以尝试指定您要从中查询该记录的数据库吗? GroupT.objects.using(dbname).filter(name="hello Group 2000 collection!")
  • @SyedMauzeRehan 和其他收藏一样。

标签: python mongodb python-2.7 mongoengine


【解决方案1】:

截至mongoengine==0.10.0 mongoengine.context_managers.switch_collection(cls, collection_name) 在示例中用作“with switch_collection(Group, 'group1') as Group:” 在函数内部不起作用。它给了unboundlocalerror。使用现有资源的简单方法是:

获得:

new_group = Group.switch_collection(Group(),'group1')
from mongoengine.queryset import QuerySet
new_objects = QuerySet(Group,new_group._get_collection())

使用new_objects.all() 获取所有对象等

保存:

group_obj = Group()
group_obj.switch_collection('group2')
group_obj.save()

【讨论】:

  • 太好了,正在找这个。
【解决方案2】:

虽然 Prachetos Sadhukhan 的回答对我有用,但我更喜欢直接获取收藏,而不是依赖私有 _get_collection 方法:

from mongoengine import connection
new_group_collection = connection.get_db()['group1']
from mongoengine.queryset import QuerySet
new_objects = QuerySet(Group, new_group_collection)

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 2018-05-03
    • 2015-10-04
    • 1970-01-01
    • 2023-03-12
    • 2014-08-16
    • 1970-01-01
    • 2012-02-25
    • 1970-01-01
    相关资源
    最近更新 更多