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"}
}
}
或者,仅使用 EmbeddedDocumentField
的 index 0
访问它?
print(properties[0])
{"name": "Dummy Name","color": "#000000"}
我想找到一个解决方案,解决 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"}
}
}
或者,仅使用 EmbeddedDocumentField
的 index 0
访问它?
print(properties[0])
{"name": "Dummy Name","color": "#000000"}