2015-06-17 2 views
0

Я написал представление и вставил его на сервер couchbase через шлюз синхронизации. Когда я нажимаю «Показать результаты» в консоли couchbase, он возвращает один документ. Это представление является производственным видом, а не видом развития. Когда я попытался получить доступ к этому представлению из приложения Android, он вернул пустой индекс. Я также попытался написать представление в приложении. Это тоже возвращает пустой индекс. Кажется, я не могу найти проблему. Любая помощь будет оценена по достоинству. Спасибо!couchbase client (android) view возвращает пустой индекс

Это мнение после того, как он был вставлен через шлюз синхронизации с помощью REST API вызовов администратора порта (: 4985) синхроимпульса шлюза: -

function(doc,meta) { 
    var sync = doc._sync; 
    if (sync === undefined || meta.id.substring(0,6) == "_sync:") 
     return; 
    if ((sync.flags & 1) || sync.deleted) 
     return; 
    delete doc.sync; 
    meta.rev = sync.rev; 
    (function (doc, meta) { if (doc.type != null && doc.type== "ReferenceClass") { emit(doc.type, doc); }}) (doc, meta); 
} 

Это возвращает один документ с типом = «ReferenceClass» , В базе данных с этим типом есть только один документ.

Это мнение я написал в андроида приложения: -

com.couchbase.lite.View viewItems = database.getView(String.format("%s/%s", "design_document", "view2")); 
viewItems.setMap(new Mapper() { 
    @Override 
    public void map(Map<String, Object> document, Emitter emitter) { 
     if (document.get("type") != null && document.get("type") == "ReferenceClass") 
      emitter.emit(document.get("type"), document); 
    } 
}, "1.0"); 

Здесь я также попытался обновить номер версии на «2», пока проблема не решена.

Это где я запрашивая и построение индекса: -

Query query = database.getView("design_document/view2").createQuery(); 
QueryEnumerator result = query.run(); 
System.out.println("*************** query count="+result.getCount()); 
for(Iterator<QueryRow> it=result; it.hasNext();){ 
    QueryRow row=it.next(); 
    System.out.println("*************** row="+row.toString()); 
} 

Это выход на LogCat для query.run(): -

Re-indexing view: design_document/view2 
I/CBLite﹕ main Begin transaction (level 1) 
V/View﹕ lastSequence (3) == dbMaxSequence (3), nothing to do 
I/CBLite﹕ main Committing transaction (level 1) 
V/View﹕ Query design_document/view2: SELECT key, value, docid, revs.sequence FROM maps, revs, docs WHERE maps.view_id=? AND revs.sequence = maps.sequence AND docs.doc_id = revs.doc_id ORDER BY key LIMIT ? OFFSET ? | args: [2, 2147483647, 0] 
D/CBLite﹕ Query view design_document/view2 completed in 6 milliseconds 
I/System.out﹕ *************** query count=0 

Я вставил документ типа «ReferenceClass», используя телефон, поэтому он должен быть в базе данных CBlite. Однако я не добавил его в базу данных «_local».

Я также попытался получить документ по идентификатору. Это отлично работало для документов, вставленных с телефона, а также для документов, вставленных на сервер с других телефонов.

Я вставил следующую строку кода после функции карты: -

System.out.println("************** view index=" + viewItems.dump().toString()); 

, к которому я получил следующий результат: -

I/System.out﹕ ************** view index=[] 

Я также попытался изменить

if (document.get("type") != null && document.get("type") == "ReferenceClass") 

заявление на имя

if (document.get("type") != null && document.get("type").equals("ReferenceClass")) 

ответ

0

Похоже, что проблема была связана с имуществом, которое я назвал «типом». Я изменил имя ключа с «type» на «type_doc», и теперь запрос выполняется нормально. Так что теперь моя функция карта выглядит следующим образом: -

com.couchbase.lite.View viewItems = database.getView(String.format("%s/%s", "design_document", "view2")); 
viewItems.setMap(new Mapper() { 
      @Override 
      public void map(Map<String, Object> document, Emitter emitter) { 
       if (document.get("type_doc") != null && document.get("type_doc") == "ReferenceClass") 
        emitter.emit(document.get("type_doc"), document); 
      } 
     }, "1.0"); 

Я предполагаю, что смотрел на «типа» как JSON или иным образом. Я не уверен. Может кто-нибудь объяснить подробности? В документе не было ключа «типа», кроме введенного «типа», но я предполагаю, что неправильное значение «типа» читалось откуда-то еще.

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