2016-11-19 35 views
1

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

一个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格式导出?

回答

1

尝试DictFieldDynamicDocument

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"} 
+0

是的,我实际上重新阅读文档,并看到DictField。 :))我希望这完全贯穿始终。谢谢! – Reiion