Geojson 的属性格式为 MongoDB/Mongoengine

Properties Format on Geojson to MongoDB/Mongoengine

我想找到一个解决方案,解决 DataField 我应该给带有 properties 列的 geojson。目前,下面的 geojson 格式不会有任何问题,因为它只需要 StringField()PointField().

geojson 格式如下所示:

{
name : "Timmy's Taco Truck",
  loc : {
    type : "Point",
    coordinates : [ 37.7577 , -122.4376 ]
  }
}

但是对于具有这种格式的 geojson:

{
   "type" : "Feature",
   "id" : "ID80001",
   "geometry":{"type": "LineString", "coordinates":[[122.332,14.241],[125.332,13.532]]},
   "properties":{ "name":"Dummy Name", "color":"#000000" }
}

使用如下所示的模型

from mongoengine import *
from colorful.fields import RGBColorField

class Geometry(Document):
   type = StringField()
   id = StringField()
   geometry = LineStringField()
   name = StringField() color= RGBColorField() ***OR*** properties = ???

如果我使用 EmbeddedDocumentField 并创建一个单独的属性字段,它将导致 "properties": [{"name": "Dummy Name","color": "#000000"}]

不是:

"properties": {"name": "Dummy Name","color": "#000000"}

如何在模型中保留 geojson 格式?

尝试DictField or DynamicDocument

from mongoengine import *

class Geometry(Document):
   type = StringField()
   id = StringField()
   geometry = LineStringField()
   properties = DictField()


g = Geometry()
# Assuming id is unique
g.properties['id'] = {"name": "Dummy Name","color": "#000000"}
g.save()

db.Geometry.findOne()
{
    "_id": <some_id>
    "properties": {
        "<some_id>": {
            {"name": "Dummy Name","color": "#000000"}
        }
}

或者,仅使用 EmbeddedDocumentFieldindex 0 访问它?

print(properties[0])
{"name": "Dummy Name","color": "#000000"}