2016-11-19 13 views
1

Я хотел был бы найти решение на что DataField Я должен дать geojson с колонкой properties. В настоящее время формат geojson, указанный ниже, не будет иметь никаких проблем, так как ему понадобится только StringField() и PointField().Свойства Формат на Geojson to 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

Пробег: DictField или 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"} 
     } 
} 

или просто получить доступ к нему с помощью index 0 из EmbeddedDocumentField?

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

Да, я действительно перечитал документы и увидел DictField. :)) Надеюсь, это прекрасно работает повсюду. Благодаря! – Reiion

 Смежные вопросы

  • Нет связанных вопросов^_^