2014-02-08 3 views
2

У меня есть требование, в котором я получил документ из couchbase.Как получить документ, используя представление в couchbase

не Следуя функции карт, которые я использую для того же -

function (doc, meta) { 
    if (meta.type == "json" && doc!=null) { 
    emit(doc); 
    } 
} 

Там будет не снижать функцию. Кроме того, после моего Java-код, чтобы получить документ -

List<URI> hosts = Arrays.asList(
      new URI("http://<some DNS with port>/pools") 
    ); 

    // Name of the Bucket to connect to 
    String bucket = "Test-Sessions"; 

    // Password of the bucket (empty) string if none 
    String password = ""; 
    //System.setProperty("viewmode", "development"); 
    // Connect to the Cluster 
    CouchbaseClient client = new CouchbaseClient(hosts, bucket, password); 


    String designDoc = "sessions"; 
    String viewName = "by_test"; 
    View view = client.getView(designDoc, viewName); 
    Query query = new Query(); 
    query.setIncludeDocs(true); 
    query.setKey(String.valueOf(122)); 
    ViewResponse result = client.query(view, query); 
    Object object = null; 
    for(ViewRow row : result) { 
     if(null != row) { 
     object = row.getDocument(); 
     }// deal with the document/data 
    } 
    System.out.println("Object" + object); 

И данные, которые я имею в couchbase является ключевым - «122» и значение - «истина». Но по какой-то причине я не получаю никаких строк в представлении ViewResponse. Что не так, кто-нибудь может помочь?

ответ

2

Я не понимаю, чего вы пытаетесь достичь здесь, вы используете представление, чтобы получить документ по его ключу? Ключ == 122? Почему вы не можете просто делать client.get (122)?

Если вам просто нужен список всех ключей в вашем ведре (которые вы можете использовать, чтобы вернуть все документы через включать документы), а затем сделать вашу функцию следующим образом:

function (doc, meta) { 
    if (meta.type == "json") { 
     emit(); 
    } 
} 

ключ от документ всегда испускается как идентификатор (viewRow.getId()). Вам не нужно выделять документ, старайтесь испускать как можно меньше данных, чтобы уменьшить размеры просмотров.

Если вам необходимо манипулировать всеми документами в вашем ковше, будьте осторожны с ростом размера, возможно, вам нужно будет посмотреть на разбивку на страницы, чтобы просмотреть результаты. http://tugdualgrall.blogspot.com.es/

Кроме того, как только у вас есть цикл ViewResponse над ним, как так:

for(ViewRow row : result) { 
    row.getDocument(); // deal with the document/data 
} 

Вам не нужно делать проверку на нуль на строках.

Смежные вопросы