【发布时间】:2016-03-04 20:10:06
【问题描述】:
我们有一个实体“机器人”。
每个机器人都有一个起点、当前位置以及名称、型号等其他属性...
Position 是一个http://geojson.org/ 点,具有更多属性,例如slope_level 和地形。
我们想使用地理查询,以查询机器人位置(和起点),因此我们需要一个索引 2dsphere(如本问题 this question 中所述)。
解决问题的方法
使用 Python-Eve,设计如下领域:
DOMAIN = {
'robot': {
'item_title': 'robot',
'url': 'robot',
'schema': {
'name': {
'type': 'string',
'required': True,
},
'start_point': {
'type': 'objectid',
'data_relation': {
'resource': 'geopoints',
'field': '_id',
'embeddable': True
}
},
'current_point': {
'type': 'objectid',
'data_relation': {
'resource': 'geopoints',
'field': '_id',
'embeddable': True
}
}
}
},
'geopoints': {
'item_title': 'geopoints',
'url': 'geopoints',
'schema': {
'terrain': {
'type': 'string',
},
'slope_level': {
'type': 'string',
},
'location': {
'type': 'point'
}
}
}
}
在这种情况下,我们有两个集合,一个包含地理点,另一个包含机器人。地理点具有其“位置”2dsphere 索引,以便运行 geojson 查询。
如果我们想创建一个新的机器人,我们需要先创建地理点“start_point”,然后创建机器人,将地理点ID作为参数发送。
有没有办法在同一个请求中发送一个包含 start_point 嵌入对象的机器人,然后告诉 Python-Eve 获取“start_point”新对象,使用此数据创建一个地理点,并将 start_point ID 链接到机器人? (我知道如果您从头开始,这可以手动完成,但我想知道是否可以使用 Python-Eve 框架)。
这是一个糟糕的设计吗?我只需要一个将 start_point 作为对象嵌入的集合,而不是作为独立集合吗? (所以在同一个请求中,我们已经准备好了对象)。
任何方法都有优点/缺点吗?
【问题讨论】: