0

我在 Spring 3 使用 Couch DB 和 Ektorp。我阅读了文档并尝试实现示例。我对这些技术很陌生。这是我不明白的地方:

@View( name = "all", map = "function(doc) { if (doc.type == 'Sofa' ) emit( null, doc._id )}")
public class SofaRepository extends CouchDbRepositorySupport<Sofa> {

    @View( name = "avg_sofa_size", map = "function(doc) {...}", reduce = "function(doc) {...}")
    public int getAverageSofaSize() {
        ViewResult r = db.queryView(createQuery("avg_sofa_size"));
        return r.getRows().get(0).getValueAsInt();
    }

}

这些wievs如何工作以及如何定义它们,在那条线上会发生什么?

4

1 回答 1

2

CouchDbRepositorySupport开箱即用为 SofaRepository 提供了以下方法:

public void add(Sofa entity);
public void update(Sofa entity);
public void remove(Sofa entity);
public Sofa get(String id);
public Sofa get(String id, String rev);
public List<T> getAll();
public boolean contains(String docId);

通过具有此内联视图注释CouchDbRepositorySupport

@View( name = "all", map = "function(doc) { if (doc.type == 'Sofa' ) emit( null, doc._id )}") 

您重新定义了getAll()方法的返回。

您还可以使用内联视图向存储库添加另一种方法:getAverageSofaSize()

@View( name = "avg_sofa_size", map = "function(doc) {...}", reduce = "function(doc) {...}")

它明确提供了一个queryundersntad db.queryView(createQuery("avg_sofa_size"));db这是一个能够创建、删除、清除、查找等的CouchDbConnector 。

查看有关定义行内视图的更多文档

于 2011-10-12T15:22:49.120 回答