如何在python eve中定义为嵌入式词典的子资源列表元素

时间:2016-10-25 13:23:45

标签: eve

我使用此架构定义了资源

# 'people' schema definition
'schema'= {
    'firstname': {
        'type': 'string',
        'minlength': 1,
        'maxlength': 10,
    },
    'lastname': {
        'type': 'string',
        'minlength': 1,
        'maxlength': 15,
        'required': True,
        'unique': True,
    },
    # 'role' is a list, and can only contain values from 'allowed'.
    'role': {
        'type': 'list',
        'allowed': ["author", "contributor", "copy"],
    },
    # An embedded list of 'strongly-typed' dictionary.
    'locations': {
        'type': 'list',
        'schema' {
            'type': 'dict',
            'schema': {
                'address': {'type': 'string'},
                'city': {'type': 'string'}
            },
        },
    },
    'born': {
        'type': 'datetime',
    },
}

是否可以通过引用人员的相同数据源并对其执行搜索来将位置定义为子资源?

e.g。人/<姓名> /位置/<城市>

回复:地点列表

我需要在人员文档中存储位置的原因是为了利用mongo中的文档原子性。

我可能需要在一次交易中更新某个人的多个位置。因此,我想确保更新一个人(或没有)所需的所有位置。没有中间状态。

1 个答案:

答案 0 :(得分:2)

不幸的是,这是不可能的(正则表达式中的点缀符号,除其他外)。但是,没有什么能阻止您(或您的客户端应用程序)查询people端点,如下所示:

people?where={"firstname": "<firstname>", "locations.city": "<city>"}

这在性能方面也是理想的。写入仍然是原子的,一旦正确构建索引,查询就会被优化。