如何在Python中为递归对象创建Mongo文档架构?

自引用Python对象MongoDB架构

我要达到什么目的?

我正在尝试创建的程序可以处理描述杂货产品类别的数据,例如:牛奶,牛肉,玉米,当地水果等。我计划将此数据存储在 MongoDB 实例中,因此创建 schema 会很好。

我遇到问题的原因是类别具有子类别(乳制品:牛奶,奶酪,酸奶;肉类:牛肉,猪肉等),导致产生递归对象

Python单独

我研究了StackOverflow,该如何在Python中处理这种结构。

class Category():
    def _init_(self,name,amount,subcategories = ()):
        self.name = name
        self.amount = amount
        for subcategory in subcategories:
            assert isinstance(subcategory,Category)
        self.subcategories = subcategories

这似乎是正确的...

模式部分

...但是直到我尝试将其绑定到架构中为止:

class Category(mongoengine.EmbeddedDocument):
    def _init_(self,Category)
        self.subcategories = subcategories


    name = mongoengine.StringField(required=True)
    amount = mongoengine.FloatField(required=True)
    subcategories = mongoengine.EmbeddedDocumentListField(Category,default=None)
    meta = {
        'db_alias': 'core','collection': 'category','indexes': [
            'name','amount','subcategories',],'ordering': ['-name']
    }

运行此代码会导致错误:

  

subbcategories = mongoengine.EmbeddedDocumentListField(Category,default = None)NameError:名称'Category'未定义

我尝试引用父类别,而不是嵌入子类别:

parent_category = mongoengine.ObjectIdField(Category,default=None)

但是我仍然得到完全相同的错误消息:

  

parent_category = mongoengine.ObjectIdField(Category,default = None)NameError:名称'Category'未定义

问题本身

如何为这样的递归对象定义模式?有可能吗?

yimao5788 回答:如何在Python中为递归对象创建Mongo文档架构?

您是否可以尝试在此行中使用str 'Category'而不是类型Category

subcategories = mongoengine.EmbeddedDocumentListField('Category',default=None)

EmbeddedDocumentListField使用EmbeddedDocument进行初始化。

EmbeddedDocument接受str。

本文链接:https://www.f2er.com/3095244.html

大家都在问