在mongoengine中获取动态集合名

4 投票
1 回答
5359 浏览
提问于 2025-04-17 04:32

这里有个场景。我有一个叫做 Permission 的模型。假设它长这样:

class Permission(Document):
    meta = {'collection': 'permission'}
    permission = DictField()
    owner = ReferenceField('user')

这个模型是从 mongoengine 的 Document 类继承来的。所以当我保存这个模型的一个实例时,数据库里会自动创建一个叫做 permission 的集合。

我想要能够动态地改变这个集合的名字。比如说,如果我有一个 Contacts 模型,想要保存这个 Contacts 模型的权限,我就不想把它放到 permission 这个集合里,而是希望能保存到一个叫做 contact_permission 的单独集合里。

我使用了 mongoengine 的 feature/dynamic_collection_naming 分支,但我还没搞明白怎么让它工作。我尝试了这个:

p = Permission()
...
p.meta['collection'] = 'contact_permission'
p.save()

但是这个方法不行。你能帮我一下吗?

1 个回答

2

这不是动态集合命名的正确用法。快速查看你提到的分支中的提交记录,可以看到这个提交,它展示了如何使用它:

https://github.com/hmarr/mongoengine/commit/c62b6321adaba6c3eb54ce2dc2c1bd3069568399

撰写回答