我们有一个实体"机器人"。
每个机器人都有一个起点,当前位置,以及名称,模型等其他属性......
位置是http://geojson.org/点,有更多属性,例如slope_level和terrain。
我们想使用地理查询,以便查询机器人位置(和起点),因此我们需要一个索引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'
}
}
}
}
在这种情况下,我们有两个集合,一个包含地理位置,另一个包含机器人。 geopoint有它的位置" 2dsphere索引,以便运行geojson查询。
如果我们想要创建一个新的机器人,我们需要首先创建geopoint" start_point",然后创建机器人,作为参数发送地理位置ID。
有没有办法在同一个请求中发送一个包含start_point嵌入对象的机器人,然后告诉Python-Eve采取" start_point"新对象,使用此数据创建一个geopoint,并将start_point ID链接到机器人? (我知道这可以手动完成,如果你从头开始,但我想知道是否可以使用Python-Eve框架。)
这是一个糟糕的设计,我需要只有一个集合,其中start_point作为对象嵌入,而不是作为独立集合? (所以在同一个请求中我们准备好了对象)。
这种做法有没有赞成?
答案 0 :(得分:1)
我说如果你的地理位置以某种方式被其他机器人/资源重新使用,将单个机器人数据分成两个集合最终会有意义,这似乎不太可能。
即便如此,考虑到你在减少存储/索引空间方面的优势(非常),我想知道这是否有任何意义,因为你可以查询你的地理位置/地形/等。即使每种机器人都存储了这种数据(您仍然可以找到位于同一位置的所有机器人)。此外,考虑到您在robot
端点添加的双重嵌入会对您造成的性能损失。
所以真正的问题是,通过将机器人数据分成两个集合来增加复杂性是否真的值得?