如何在Python中为递归对象创建Mongo文档模式



自引用Python对象MongoDB Schema

我想实现什么

我试图创建的程序处理描述杂货类别的数据,如:牛奶、牛肉、玉米、当地水果等。我计划将这些数据存储在MongoDB实例中,因此创建模式会很好。

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

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, name, amount, subcategories = ()):
self.name = name
self.amount = amount
for subcategory in subcategories:
assert isinstance(subcategory, 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']
}

运行此代码会导致错误:

subcategories=mongoengine。EmbeddedDocumentListField(类别,默认值=无(名称错误:名称"类别"未定义

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

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

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

parent_category=mongoengine。ObjectIdField(类别,默认值=无(名称错误:名称"类别"未定义

问题本身

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

你能试着在这一行中使用str'Category'而不是键入Category吗:

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

EmbeddedDocumentListField使用EmbeddedDocument进行初始化。

EmbeddedDocument接受str.

最新更新