Django允许为MongoDB中的每个文档定义不同的字段集吗?

2024-09-28 23:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

Django和MongoDB

支持different set of fields for each document in a collection是MongoDB的特性之一。它允许您在同一个集合中存储相似但属性不同的数据。在

例如:

{
        _id: ObjectId("51156a1e056d6f966f268f81"),
        type: "Article",
        author: "Derick Rethans",
        title: "Introduction to Document Databases with MongoDB",
        date: ISODate("2013-04-24T16:26:31.911Z"),
        body: "This arti…"
},
{
        _id: ObjectId("51156a1e056d6f966f268f82"),
        type: "Book",
        author: "Derick Rethans",
        title: "php|architect's Guide to Date and Time Programming with PHP",
        isbn: "978-0-9738621-5-7"
}

默认情况下,Django不支持mongodb这样的非关系数据库,但是有一些lib用于此目的。例如,Django MongoDB Engine是Django的MongoDB后端。在

MongoDB允许对集合中的每个文档使用不同的字段集,但是在django中,您必须定义models.py

^{pr2}$

问题是:在使用Django时,有没有办法为MongoDB中集合中的每个文档定义不同的字段集?在


Tags: todjango文档id定义titlemongodbtype
1条回答
网友
1楼 · 发布于 2024-09-28 23:44:21

另一种选择

我喜欢使用django-mongoengine,因为它在处理MongoDB模型时可以使事情更清楚。在

例如,您可以创建要转换为模型的结构化Document,或者是要在已经存在的模型中使用的结构化文档Embedded文档。在

from django_mongoengine import Document, EmbeddedDocument, fields

class Comment(EmbeddedDocument):
    created_at = fields.DateTimeField(
        default=datetime.datetime.now, editable=False,
    )
    author = fields.StringField(verbose_name="Name", max_length=255)
    email  = fields.EmailField(verbose_name="Email")
    body = fields.StringField(verbose_name="Comment")

class Post(Document):
    created_at = fields.DateTimeField(
        default=datetime.datetime.now, editable=False,
    )
    title = fields.StringField(max_length=255)
    slug = fields.StringField(max_length=255, primary_key=True)
    comments = fields.ListField(
        fields.EmbeddedDocumentField('Comment'), blank=True,
    )

答案是什么

因此,对于您的情况,您需要使用的是Dynamic document schemas,它的工作方式与Document相同,但是设置给它们的任何数据/属性也将被保存。在

^{pr2}$

相关问题 更多 >