Python Django是否允许为MongoDB中的每个文档定义不同的字段集? Django和MongoDB

Python Django是否允许为MongoDB中的每个文档定义不同的字段集? Django和MongoDB,python,django,mongodb,Python,Django,Mongodb,MongoDB的特点之一是为集合中的每个文档支持一组不同的字段。它允许您在同一集合中存储具有不同属性的类似数据 例如: { _id: ObjectId("51156a1e056d6f966f268f81"), type: "Article", author: "Derick Rethans", title: "Introduction to Document Databases with MongoDB", date

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这样的非关系数据库,但有一些用于此目的的库。例如,Django的MongoDB后端

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

from django.db import models

from djangotoolbox.fields import ListField


class Post(models.Model):
    title = models.CharField()
    text = models.TextField()
    tags = ListField()
    comments = ListField()
问题是:在使用Django时,是否有任何方法可以为MongoDB集合中的每个文档定义不同的字段集 我喜欢使用,因为在处理MongoDB模型时,它会让事情变得更清楚

例如,您可以创建要转换为模型的结构化
文档
s,或者创建嵌入的
文档` s,这些文档是要在现有模型中使用的结构化文档

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,
    )
答案 因此,对于您的情况,您需要使用的是,其工作方式与文档相同,但为其设置的任何数据/属性也将被保存

class Page(DynamicDocument):
    title = StringField(max_length=200, required=True)

# Create a new page and add tags
>>> page = Page(title='Using MongoEngine')
>>> page.tags = ['mongodb', 'mongoengine']
>>> page.save()

>>> Page.objects(tags='mongoengine').count()
>>> 1