Eve - 是否可以从文档中取消设置密钥?

时间:2016-08-22 20:18:57

标签: eve

在具有可选值的架构中,例如示例中的code

'code': {
    'type': 'string',
},
'name': {
    'type': 'string',
    'required': True,
},
'email': {
    'type': 'string',
    'required': True
}

让我们说插入的文档的值为code。我可以使用Eve以某种方式取消code密钥,例如mongodb $unset吗?

2 个答案:

答案 0 :(得分:0)

实现此目的的一种方法是为端点设置default projection

  

限制API端点公开的字段集   默认情况下,对GET请求的API响应将包括由相应资源模式定义的所有字段。 datasource resource关键字的投影设置允许您重新定义字段。

people = {
    'datasource': {
        'projection': {'username': 1}
    }
}
  

无论为资源定义的架构如何,上述设置都只会向GET请求公开用户名字段。

另一种选择是利用MongoDB聚合框架本身。只需设置端点,以便在将数据返回给客户端之前执行聚合。以下内容应该有效(有关详细信息,请参阅docs):

posts = {
    'datasource': {
        'aggregation': {
            'pipeline': [{"$unset": "code"}]
        }
    }
}

您需要Eve v0.7才能获得聚合支持。

答案 1 :(得分:0)

我怀疑您可以使用PATCH请求来执行此操作,但是PUT请求应该可以执行。

import requests

# get original doc
resp = requests.get(document_url)

# prepare a new document
doc = resp.json()
new_doc = {k: v for k, v in doc.items() if not k.startswith('_')}
del new_doc['code']

# overwrite the complete document
resp = requests.put(document_url, json=new_doc, headers={'If-Match': doc['_etag']}