Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用继承查询MongoEngine文档?_Python_Mongodb_Python 3.x_Inheritance_Mongoengine - Fatal编程技术网

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、
    Url
    s和
    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>]