【问题标题】:Generate multiple objects in different collections in same POST request (Python-Eve)在同一个 POST 请求中生成不同集合中的多个对象(Python-Eve)
【发布时间】: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 作为对象嵌入的集合,而不是作为独立集合吗? (所以在同一个请求中,我们已经准备好了对象)。

任何方法都有优点/缺点吗?

【问题讨论】:

    标签: python api geojson eve


    【解决方案1】:

    我想说,如果您的地理点会以某种方式被其他机器人/资源重新使用,那么将单个机器人数据分成两个集合最终会有意义,这似乎不太可能。

    即便如此,鉴于您在减少存储/索引空间方面获得的(非常)小优势,我想知道这是否有任何意义,因为您可以查询您的地理点/地形/等。即使每个机器人都存储了这种数据(您仍然可以找到位于同一位置的所有机器人)。此外,请考虑由于在robot 端点添加双重嵌入而导致的性能损失。

    所以问题真的是,将机器人数据分成两个集合所带来的额外复杂性真的值得吗?

    【讨论】:

    • 非常有用的答案!!我一直在测试,你有理由,如果我有两个不同的集合,我需要处理的额外复杂性是不值得的。谢谢!
    猜你喜欢
    • 2022-12-10
    • 2019-08-17
    • 2020-09-18
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多