1

背景情報

以前の質問 ( Eve では、コレクションのサブリソースを作成し、親コレクションのエンドポイントを保持するにはどうすればよいですか? ) に対する答えは、Eve の 1 つのデータソース機能である複数のエンドポイントを使用することでした。IRC チャンネルで cuibonobo と話していたのですが、彼女はここに示すように、game_id を文字列ではなく objectid に変更することで、これを機能させることができました。

http://gist.github.com/uunsamp/d969116367181bb30731

しかし、私はこれを機能させませんでした。会話からわかるように、ドキュメントを別の方法でコレクションに入れていました。

14:59 〈キュイボノボ〉号 以前の設定ファイルではゲーム ID が文字列として保存されていたため、ルックアップが機能しません。

15:00 < cuibonobo> game_id が ObjectId として保存されているドキュメントでのみ機能します

15:01 < cuibonobo> Eve の現在の動作方法では、タイプを「objectid」に設定すると、データベースに保存する前に文字列を Mongo ObjectId に変換します。しかし、その変換は文字列では起こりません

15:02 < znn> オブジェクトの保存に eve を使ったことがない

15:02 < znn> アイテムを挿入するためにmongoシェルインターフェースを使用しています

15:03 <cuibonobo> ああ。うーん。それは物事を複雑にするかもしれません。Eve は、ドキュメントを挿入する前に型変換などを行います。

15:04 < cuibonobo> なのでmongoに直接何かを挿入することは一般的に推奨されません

私をstackoverflowに導く質問:)

http メソッド POST を使用してドキュメントをコレクションに挿入することと、mongo シェルを使用することの違いは何ですか? 最終的に、ユーザーはいずれかのドキュメント挿入方法を使用できるようになりますか?

追加情報

私はこの質問をする前にhttp://github.com/nicolaiarocci/eve/blob/develop/eve/methods/post.pyを調べていましたが、理解するのにしばらく時間がかかる可能性があります。私よりもコードに精通しています。

4

1 に答える 1

3

簡単な答えは、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.

使用

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は同じ検証の対象となり、HTTP 経由で API クライアントによって保存された場合と同様に保存されます。0.5-dev (まだリリースされていません) では、PATCH、PUT、および DELETE 内部メソッドも追加されました。

于 2014-10-04T06:40:31.540 に答える