3

起初我误解了我的问题并发布了这个问题:有人可以解释一下 Ektorp 中的 Cascading 和 FetchType 懒惰吗?

我需要做的:我需要在 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 来调用它,但它只允许我调用 Views。现在我被迫自己管理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 的角度来看,显示功能并不是一个糟糕的主意。Ektorp 可能不支持它们,大概是因为它们没有被大量使用,但是 Ektorp 的开源和在 Github 上;你可以很容易地添加这个功能,特别是因为你已经有了它的工作实现的基础。

或者,您可以只为给定的一组字段构建一个执行此操作的视图。但是,您不能真正将其参数化,因此您需要事先知道的明确定义的字段集。

最后,我建议要么拉出整个文档而不用担心它(除非您处于带宽非常有限的情况下,这可能无关紧要),或者将文档拆分为您要查询的组成部分并独立请求他们,如果这绝对是不寻常的情况。

于 2013-04-17T11:20:25.240 回答