Overview
在本指南中,您可以学习;了解如何使用 Django MongoDB后端来存储地理空间数据。Django MongoDB后端支持 Django 的 GeoDjango Web框架,该框架允许您在 Django 应用程序中处理地理空间数据。
重要
GeoDjango 限制
Django MongoDB后端的 GeoDjango支持有一些限制。要查看限制列表,请参阅 Django 和MongoDB功能兼容性指南中的 Contrib App 支持。
提示
要使用本指南中的示例,请确保您有一个使用 Django MongoDB 后端并访问 Atlas 示例数据集 的 Django 应用程序。要学习;了解如何设立应用程序,请参阅入门教程。
配置 GeoDjango
在使用 Django MongoDB后端对地理空间数据进行建模之前,必须将 Django项目配置为使用 GeoDjango。
要使用 GeoDjango,请执行以下步骤:
创建 GeoDjango 模型
要将地理空间数据存储在模型中,请将以下导入声明添加到项目的 models.py
文件中:
from django.contrib.gis.db import models
重要
如果在 models.py
文件中使用 from django.db import models
导入声明,请确保在定义 GeoDjango 字段之前将其替换为前面的导入声明。
然后,您可以使用 GeoDjango 字段在模型类中定义地理空间空间字段。MongoDB将每个字段类型存储为集合文档中的 GeoJSON
对象。Django MongoDB后端会自动在这些字段上创建 2dsphere
索引,从而允许您执行地理空间查询。
提示
要学习;了解如何使用 raw_aggregate()
方法查询地理空间数据,请参阅《执行原始数据库查询》指南中的“查询地理空间数据”。
下表列出了支持的 GeoDjango 字段及其相应的MongoDB GeoJSON
对象类型:
GeoDjango 字段 | GeoJSON 类型 |
---|---|
| |
| |
| |
| |
| |
| |
|
模型示例
此示例定义了 Theater
和 Geo
模型来表示Atlas示例数据集中的 sample_mflix.theaters
集合。
在MongoDB中,此示例集合的 location
字段存储一个表示剧院位置的Point
对象。每个字段存储以下数据:
{ "location": { "address": { "street": "<street name>", "city": "<city name>", "state": "<state name>", "zip": "<zip code>" }, "geo": { "type": "Point", "coordinates": [<longitude>, <latitude>] } } }
您可以通过在项目的 models.py
文件中创建以下模型,使用 Django MongoDB后端来存储此数据:
from django.contrib.gis.db import models from django_mongodb_backend.models import EmbeddedModel from django_mongodb_backend.fields import EmbeddedModelField class Location(EmbeddedModel): address = models.JSONField(null=True) geo = models.PointField() class Theater(models.Model): theater_id = models.IntegerField(default=0, db_column="theaterId") location = EmbeddedModelField(Location, null=True, blank=True) class Meta: db_table = "theaters" managed = False def __str__(self): return self.theater_id
在前面的代码中,Theater
模型有一个存储嵌入式 Location
模型的 location
字段。嵌入式模型包含一个名为 geo
的 PointField
,用于存储位置数据。
更多信息
要学习;了解有关 GeoDjango 模型的更多信息,请参阅 Django 文档中的 GeoDjango 模型API 。
要学习;了解有关在MongoDB中存储地理空间数据的更多信息,请参阅MongoDB Server文档中的地理空间数据。