Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs 菜单
Docs 主页
/ / /
Django MongoDB后端
/

执行 CRUD 操作

在本指南中,您可以学习;了解如何使用 Django MongoDB后端对MongoDB集合运行创建、读取、更新和删除(增删改查 ) 操作。

您还可以使用 Django 管理站点在 Web 界面上编辑模型及其相应的集合。有关详细信息,请参阅 Django 文档中的 Django 管理站点条目。

您可以使用 Django QuerySet API提供的方法来运行增删改查操作。 要运行这些操作,您可以在模型管理器上调用 QuerySet 方法。 Manager 类处理数据库操作,并允许您通过引用 Django 模型与MongoDB数据交互。 默认情况下,Django 会向每个模型类添加一个名为 objectsManager

提示

要学习;了解有关 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

要删除集合中的文档,请在模型管理器上调用 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

如需学习;了解有关执行读取操作的更多信息,请参阅“指定查询”指南。

要查看更多创建、读取、更新和删除示例,请参阅入门教程的以下步骤:

后退

与数据交互

在此页面上