Overview
在本指南中,您可以学习;了解如何使用 Django MongoDB后端对MongoDB集合运行创建、读取、更新和删除(增删改查 ) 操作。
您还可以使用 Django 管理站点在 Web 界面上编辑模型及其相应的集合。有关详细信息,请参阅 Django 文档中的 Django 管理站点条目。
查询 API
您可以使用 Django QuerySet
API提供的方法来运行增删改查操作。 要运行这些操作,您可以在模型管理器上调用 QuerySet
方法。 Manager
类处理数据库操作,并允许您通过引用 Django 模型与MongoDB数据交互。 默认情况下,Django 会向每个模型类添加一个名为 objects
的 Manager
。
提示
要学习;了解有关 Django 的QuerySet
API的详情,请参阅 Django 文档中的QuerySet
。
本指南介绍如何使用以下 QuerySet
方法:
create() :将文档插入到集合中
过滤() 和 get() :检索一个或多个集合文档
更新() :修改集合文档
删除() :删除集合文档
样本数据
本指南中的示例使用Movie
模型,该模型表示Atlas示例数据集中的sample_mflix.movies
集合。Movie
模型类具有以下定义:
from django.db import models from django_mongodb_backend.fields import ArrayField class Movie(models.Model): title = models.CharField(max_length=200) plot = models.TextField(blank=True) runtime = models.IntegerField(default=0) released = models.DateTimeField("release date", null=True, blank=True) genres = ArrayField(models.CharField(max_length=100), null=True, blank=True) class Meta: db_table = "movies" managed = False def __str__(self): return self.title
Movie
模型包括一个内部 Meta
类(用于指定模型元数据)和一个 __str__()
方法(用于定义模型的字符串表示形式)。 要学习;了解这些模型功能,请参阅创建模型指南中的 定义模型。
运行代码示例
您可以使用Python交互式Shell来运行代码示例。 要进入Shell ,请从项目的根目录运行以下命令:
python manage.py shell
进入Python Shell后,请确保导入以下模型和模块:
from <your application name>.models import Movie from django.utils import timezone from datetime import datetime
要学习;了解如何创建使用 Movie
模型和Python交互式Shell与MongoDB文档交互的Django应用程序,请访问入门教程。
插入文档
要将文档插入集合,请在模型管理器上调用 create()
方法。 将新文档的字段名称和字段值作为参数传递给 create()
方法。
例子
以下示例调用 create()
方法将文档插入到 sample_mflix.movies
集合中。 新文档的 title
值为 "Poor Things"
,runtime
值为 141
:
Movie.objects.create(title="Poor Things", runtime=141)
create()
方法允许您创建新的 Movie
对象,并通过一次方法调用将该对象保存到MongoDB 。 或者,您可以创建一个 Movie
对象并调用 save()
,如以下代码所示:
movie = Movie(title="Poor Things", runtime=141) movie.save()
提示
要学习;了解有关create()
方法的详情,请参阅 Django 文档中的create
。
读取文档
要从集合中检索文档,请在模型管理器上调用 filter()
方法。 将查询过滤或指定要检索哪些文档的条件作为参数传递给 filter()
方法。
或者,您可以调用 get()
方法来检索与查询匹配的单个文档。
返回多个文档示例
以下示例调用 filter()
方法从 sample_mflix.movies
集合中检索文档。 该查询返回 Movie
对象,表示 1 1 月发布的电影,2000:
Movie.objects.filter(released=timezone.make_aware(datetime(2000, 1, 1)))
<QuerySet [<Movie: The Bumblebee Flies Anyway>, <Movie: Angels of the Universe>, <Movie: First Person Plural>, <Movie: Just, Melvin: Just Evil>, <Movie: Sound and Fury>, <Movie: Peppermint Candy>]>
提示
要学习;了解有关filter()
方法的详情,请参阅 Django 文档中的filter
。
返回一个文档示例
要仅检索与查询条件匹配的一份文档,请调用 get()
方法并将查询过滤作为参数传递。 以下示例检索 title
值为 "Boyhood"
的文档:
Movie.objects.get(title="Boyhood")
<Movie: Boyhood>
重要
如果您的查询不匹配任何文档或匹配多个文档,则 get()
方法会产生错误。 要从可能匹配多个文档的查询中检索一个文档,请将 first()
方法链接到 filter()
,如以下代码所示:
Movie.objects.filter(title="Boyhood").first()
提示
要学习;了解有关get()
方法的详情,请参阅 Django 文档中的get
。
修改文档
要修改集合中的文档,请在模型管理器上调用 filter()
和 update()
方法。 将查询过滤或指定要更新文档的条件作为参数传递给 filter()
方法。 然后,将要更新的字段和值作为参数传递给 update()
方法。
例子
以下示例调用 update()
方法来修改 sample_mflix.movies
集合中的文档。 此代码匹配 title
值为 "High Fidelity"
的文档并添加 plot
字段:
Movie.objects.filter( title="High Fidelity").update( plot="Rob, a record store owner, recounts his top five breakups,including the one in progress.")
// Outputs the number of modified documents 1
提示
要学习;了解有关update()
方法的详情,请参阅 Django 文档中的update
。
Delete Documents
要删除集合中的文档,请在模型管理器上调用 filter()
和 delete()
方法,将查询过滤或指定要删除文档的条件作为参数传递给 filter()
方法。
例子
以下示例调用 delete()
方法来删除sample_mflix.movies
集合中的文档。 此代码会匹配并删除 runtime
值为 5
的文档:
Movie.objects.filter(runtime=5).delete()
// Outputs the number of deleted documents and objects (16, {'sample_mflix.Movie': 16})
提示
要学习;了解有关delete()
方法的详情,请参阅 Django 文档中的delete
。
更多信息
如需学习;了解有关执行读取操作的更多信息,请参阅“指定查询”指南。
要查看更多创建、读取、更新和删除示例,请参阅入门教程的以下步骤: