python - 如何为 MongoEngine PointField 格式化数据

标签 python mongodb pymongo mongoengine geojson

所以我想用mongodb中的位置数据做一些实验,所以我写了一些python代码来生成一些测试数据。
不幸的是,文档位于 http://docs.mongoengine.org/apireference.html#mongoengine.fields.PointField没有明确说明如何格式化输入。

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

尝试存储包含 lng/lat 的列表失败:

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

传递 geoJSON 文档会导致相同的错误:

>>> 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)

这应该如何格式化?

注意:之前有人问过类似的问题,但答案没有帮助:Mongoengine PointField gives location object expected, location array not in correct format error

最佳答案

我无法在此处重现您的错误。 您能告知您使用的是哪个版本的 mongoengine 吗?

这是我如何实现一个简单的例子:

在我的 models.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

在 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()
<PointFieldExample: PointFieldExample object>

>>> pfe.toJSON()
{'id': '5345a51dbeac9e0c561b1892', 'name': 'None', 'point': [-15, -47]}

在我的数据库上

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

问候

关于python - 如何为 MongoEngine PointField 格式化数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940168/

相关文章:

python - 大数据库中的 MongoDB 计数非常慢

python - 队列空方法坏了吗?

python - 在 Get 请求中返回对象时出现 AttributeError '' 对象没有属性 'get'

javascript - Mongoose 小猫示例不起作用

java - mongo问题中的QueryBuilder和 'in'方法

python Flask mongodb 插入数据

mongodb - Pymongo 仅以列表形式返回值

python - 我们如何有效地检查一个字符串列表是否包含另一个字符串列表中的单词?

python - 解析 WKT 文件

java - 在 Spring 5 中将 Query dsl 与 Reactive Mongo Repository 集成