背景资料
我之前的问题(In Eve, how can you make a sub-resource of a collection and keep the parent collections endpoint?)的答案是使用Eve的多个端点,一个数据源功能。在IRC频道,我和cuibonobo说话,她能够通过将game_id改为objectid而不是字符串来实现这一点,如下所示:
http://gist.github.com/uunsamp/d969116367181bb30731
但是我没有让这个工作,正如你从对话中看到的那样,我正在以不同的方式将文档放入集合中:
14:59< cuibonobo>没有。只是因为您之前的设置文件将游戏ID保存为字符串,所以查找无法正常工作
15:00< cuibonobo>它只适用于将game_id保存为ObjectId的文档
15:01< cuibonobo> Eve目前的工作方式,如果你将类型设置为'objectid',它会在将字符串保存到数据库之前将其转换为Mongo ObjectId。但是字符串不会发生转换
15:02< ZNN>我没有使用前夕存储对象
15:02< ZNN>我一直在使用mongo shell接口插入项目
15:03< cuibonobo>哦。哼。这可能会使事情复杂化。 Eve在插入文档之前会输入转换和其他内容。
15:04< cuibonobo>所以一般不建议将东西直接插入mongo
问题 这导致我到stackoverflow :)
使用http方法POST和使用mongo shell将文档插入集合有什么区别?用户最终是否能够使用任何一种文档插入方法?
额外信息
在询问这个问题之前,我正在查看http://github.com/nicolaiarocci/eve/blob/develop/eve/methods/post.py,但这可能需要一段时间才能理解,这比询问可能比我更熟悉代码的人要长得多。 < / p>
答案 0 :(得分:2)
快速回答是Eve正在添加一些元字段etag
,updated
,created
以及每个存储的文档。如果要在本地存储文档(不通过HTTP),可以使用post_internal
:
Intended for internal post calls, this method is not rate limited,
authentication is not checked and pre-request events are not raised.
Adds one or more documents to a resource. Each document is validated
against the domain schema. If validation passes the document is inserted
and ID_FIELD, LAST_UPDATED and DATE_CREATED along with a link to the
document are returned. If validation fails, a list of validation issues
is returned.
用法example:
from run import app
from eve.methods.post import post_internal
payload = {
"firstname": "Ray",
"lastname": "LaMontagne",
"role": ["contributor"]
}
with app.test_request_context():
x = post_internal('people', payload)
print(x)
使用post_internal
插入的文档需要进行相同的验证,并且将像API客户端一样通过HTTP进行存储。在0.5-dev(尚未发布)PATCH,PUT和DELETE内部方法也已添加。