3

最初、私は自分の問題を誤解して、この質問を投稿しました: Ektorp で Cascading と FetchType lazy について説明してもらえますか?

私がしなければならないこと: Entityをcouchdbに保存してから、それを読み取って一部のフィールドを潜在的に無視する方法を用意する必要があります。そこで、この解決策を思いつきました。オブジェクトからフィールドを削除してから送り返す show 関数を作成します。

function(doc, req) {
    var result = doc;
    var ignore = JSON.parse(decodeURIComponent(req.query.ignore)); //this is an array of field names
    for (var i = 0, j = ignore.length; i < j; i++) {
        if (result[ignore[i]]) {
            delete result[ignore[i]];
        }
    }
    return {
        body : JSON.stringify(result),
        headers : {
            "Content-Type" : "application/json"
        }
    };
}

私は同じ機能を持っていますが、オブジェクトが保持するように関数に指示したフィールドを逆にしています。

これを行うより良い方法はありますか?

また、Ektorp を使用してこれを呼び出したいのですが、ビューしか呼び出せません。現在、http リクエストを自分で管理する必要があります。これを回避する方法はありますか?

今はこれが私が使わなければならないコードですが、Ektorp を使ってこれを行いたいと思っています。

    HttpClient httpClient = new StdHttpClient.Builder().url("http://localhost:5984").build();
    CouchDbInstance dbInstance = new StdCouchDbInstance(httpClient);
    CouchDbConnector db = new StdCouchDbConnector("mydatabase", dbInstance);
    db.createDatabaseIfNotExists();

    String[] forget = new String[] { "field_to_ignore" };
    String uri = "/mydatabase/_design/mydesigndoc/_show/ignorefields/mydocid?ignore=" + URLEncoder.encode(Json.stringify(Json.toJson(forget)), "UTF-8");
    System.out.println(uri);
    HttpResponse r = db.getConnection().get(uri);
    String stuff = new Scanner(r.getContent()).useDelimiter("\\A").next();
    System.out.println(stuff);
4

1 に答える 1

1

CouchDB の観点からすれば、show 関数は悪い考えではありません。おそらくあまり使用されていないため、Ektorpはそれらをサポートしていない可能性がありますが、EktorpのオープンソースおよびGithub上にあります。この機能を簡単に追加できます。特に、機能する実装の基本が既にあるためです。

または、特定のフィールド セットに対してこれを行うビューを作成することもできます。ただし、これを実際にパラメーター化することはできないため、事前に知っている明確に定義されたフィールドのセットが必要になります。

最後に、ドキュメント全体をプルして気にしないことをお勧めします (帯域幅が非常に制限された状況にない限り、おそらく問題にはなりません)、ドキュメントをクエリ対象の構成部分に分割し、それが間違いなく珍しいケースである場合は、それらを個別に要求します。

于 2013-04-17T11:20:25.240 に答える