Python Django是否允许为MongoDB中的每个文档定义不同的字段集? Django和MongoDB
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
{
_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