在mongoengine中为查找查询切换集合

2 投票
2 回答
2553 浏览
提问于 2025-05-01 03:19

我看过关于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
暂无标签

2 个回答

0

虽然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)
9

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()

撰写回答