Cómo formatear datos para MongoEngine PointField

Así que quería hacer algunos experimentos con datos de ubicación en mongodb, así que escribí un código python para generar algunos datos de prueba.
Desafortunadamente, la documentación en http://docs.mongoengine.org/apireference.html#mongoengine.fields.PointField no es explícita sobre cómo formatear la entrada.

class Location(db.Document): coord = db.PointField(required=True) # GeoJSON 

Al intentar almacenar una lista que contiene lng / lat falla:

 >>> a = Location(coord=[1,2]) >>> a.save() mongoengine.errors.OperationError: Could not save document (location object expected, location array not in correct format) 

Pasar los resultados de un documento geoJSON en el mismo error:

 >>> b = Location(coord={ "type" : "Point" ,"coordinates" : [1, 1]}) >>> b.save() mongoengine.errors.OperationError: Could not save document (location object expected, location array not in correct format) 

¿Cómo se debe formatear esto?

NOTA: antes se hizo una pregunta similar, pero la respuesta no fue útil: Mongoengine PointField da el objeto de ubicación esperado, la matriz de ubicación no tiene el error de formato correcto

No pude reproducir tu error aquí. ¿Puedes informar con qué versión de mongoengine estás trabajando?

Aquí es cómo podría implementar un ejemplo simple:

en mis modelos.py

 class PointFieldExample(Document): point = PointField() name = StringField() def toJSON(self): pfeJSON = {} pfeJSON['id'] = str(self.id) pfeJSON['point'] = self.point pfeJSON['name'] = str(self.name) return pfeJSON 

en la shell de Django

 $ python manage.py shell >>> from mongoengine import * >>> from myAwesomeApp.app.models import PointFieldExample >>> pfe = PointFieldExample() >>> pfe.point = 'random invalid content' >>> pfe.toJSON() {'id': 'None', 'name': 'None', 'point': 'random invalid content'} >>> pfe.save() ValidationError: ValidationError (PointFieldExample:None) (PointField can only accept lists of [x, y]: ['point']) >>> pfe.point = [-15, -47] >>> pfe.save()  >>> pfe.toJSON() {'id': '5345a51dbeac9e0c561b1892', 'name': 'None', 'point': [-15, -47]} 

en mi base de datos

 > db.point_field_example.findOne() { "_id" : ObjectId("5345a51dbeac9e0c561b1892"), "point" : { "type" : "Point", "coordinates" : [ -47, -15 ] } } 

Saludos