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。
更多信息
如需学习;了解有关执行读取操作的更多信息,请参阅“指定查询”指南。
要查看更多创建、读取、更新和删除示例,请参阅入门教程的以下步骤: