在mongoengine中为查找查询切换集合
我看过关于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()