任何Python ORM都可以充分利用NoSQL';s的无模式功能?

任何Python ORM都可以充分利用NoSQL';s的无模式功能?,python,mongodb,orm,nosql,Python,Mongodb,Orm,Nosql,我用MongoDB尝试了Django nonrel(这是Django项目的一个NoSQL分支)。在它的ORM中,类只能从抽象类继承,所以即使两个类从同一个基类继承,它们也会保存到MongoDB中的不同集合中 此设计向无模式数据库添加了预定义的模式,每个集合现在都有其唯一的模式 我想要的是,如果ClassA和ClassB是从基类继承的,那么ClassA和ClassB的每个实例都应该放在同一个集合中(或者放在NoSQL中类似的东西,而不是MongoDB)Django Norel的目标是维护与Djan

我用
MongoDB
尝试了
Django nonrel
(这是Django项目的一个NoSQL分支)。在它的ORM中,类只能从抽象类继承,所以即使两个类从同一个基类继承,它们也会保存到MongoDB中的不同集合中

此设计向无模式数据库添加了预定义的模式,每个集合现在都有其唯一的模式


我想要的是,如果ClassA和ClassB是从基类继承的,那么ClassA和ClassB的每个实例都应该放在同一个集合中(或者放在NoSQL中类似的东西,而不是MongoDB)

Django Norel的目标是维护与Django的ORM相同的行为,但允许使用非关系存储后端。由于Django不允许在同一个(关系)表中存储多个不同的模型,因此我毫不奇怪地了解到Django Nonl也不允许

如果您想了解所描述的行为,可以查看MongoDB的ODM(对象文档映射器),它受到Django ORM的启发,并与Django ORM有类似的感觉,但它允许更灵活的模式和行为,如您所描述的模式和行为

特别是,在使用Mongoengine时,您可以创建多个类,这些类的记录存储在同一个集合中,如:

class BlogPost(mongoengine.Document):
    create_date = mongoengine.DateTimeField()
    mod_date = mongoengine.DateTimeField()

    title = mongoengine.StringField()

    meta = {
        'abstract': True,
    }

    def save(self):
        if not self.pk:
            self.create_date = datetime.utcnow()
        self.mod_date = datetime.utcnow()

        super(BlogPost, self).save()

class TextBlogPost(BlogPost):
    body = mongoengine.StringField()

class ImageBlogPost(BlogPost):
    image = mongoengine.FileField()
    caption = mongoengine.StringField()

由于
TextBlogPost
ImageBlogPost
都继承自
BlogPost
,它们都将保存在同一个集合中(默认情况下,命名为“blog\u post”)。

对于一个没有任何关系的文档数据库来说,ORM有什么意义?为什么这么抽象?如果直接使用db驱动程序,我想会更容易。