Python 如何使用继承查询MongoEngine文档?
我已经使用了一段时间的Python 如何使用继承查询MongoEngine文档?,python,mongodb,python-3.x,inheritance,mongoengine,Python,Mongodb,Python 3.x,Inheritance,Mongoengine,我已经使用了一段时间的节点MongoEngine文档 我试图从simpe节点模型转到从它继承的一些更具体的元素 到目前为止我做了什么 起初,我不知道MongoEngine()提供的继承可能性,所以我使用“label”字段来区分3种类型的节点(分别是关键字、Url和域) 这是原始模型: 我在这个模型上工作了一段时间,因此节点集合当前填充了数千个文档 然后,我通过向模型中添加'allow_heritation':True并创建以下模型来实现继承: 继承模型 现在,这可以很好地创建和保存新的关键字文档
节点
MongoEngine文档
我试图从simpe节点
模型转到从它继承的一些更具体的元素
到目前为止我做了什么
起初,我不知道MongoEngine()提供的继承可能性,所以我使用“label”字段来区分3种类型的节点(分别是关键字、Url和域)
这是原始模型:
我在这个模型上工作了一段时间,因此节点
集合当前填充了数千个文档
然后,我通过向模型中添加'allow_heritation':True
并创建以下模型来实现继承:
继承模型
现在,这可以很好地创建和保存新的关键字文档
我遇到的问题是查询在此更改之前添加的旧节点
问题:
如果尝试查询所有现有节点,则仅返回在继承更改后添加的节点:
In [21]: Node.objects()
Out[21]: [<Keyword: Keyword object>]
[21]中的:Node.objects()
Out[21]:[]
- 如何访问引入继承之前添加的所有节点?
- 是否有任何方法可以将那些旧的
s根据其原始节点
属性迁移到标签
s、关键字
s和Url
s域
谢谢 发生这种情况是因为当您创建继承模型时,旧模型查询使用属性来查询此模型的记录。但是旧记录没有这个字段 将此属性填入旧记录 至于你的第二个问题 我认为,如果您要制作一个迁移脚本来填充
\u cls
字段,那么您可以根据label
字段的值来填充它的值
您可以在插入每个模型的记录时找到所需的\u cls
值
class Keyword(Node):
""" A MongoEngine Document for keyword management. """
a_keywor_specific field = IntField()
def foo(self):
print('this is a keyword specific method')
In [21]: Node.objects()
Out[21]: [<Keyword: Keyword object>]