在具有可选值的架构中,例如示例中的code
:
'code': {
'type': 'string',
},
'name': {
'type': 'string',
'required': True,
},
'email': {
'type': 'string',
'required': True
}
让我们说插入的文档的值为code
。我可以使用Eve以某种方式取消code
密钥,例如mongodb $unset
吗?
答案 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']}