2017-05-27 60 views
0

我想在我自己的自定義視圖查詢的基礎,但它並沒有變成我的預期。Couchbase精簡版的Java:創建視圖和查詢使用Exact鍵

我想查詢鍵例如[「2017」,「5」,「26」],endDateTime是我的Json數據中存儲毫秒的列。

我已經發出與列表存儲日期。

當我在今天的日期運行我的查詢(數據庫確實有我搜索的日期的數據)時,我用斷點調試以檢查在視圖中存儲日期的列表,並且查詢兩者都是相同的。

我找不到爲什麼queryEnumerator沒有返回行。

請幫助我的問題,我已經嘗試過很多方法,但仍然沒有運氣。

欣賞的幫助。

public View getViewTransactionByEndDate() { 
    View view = this.getDatabase().getView("Transaction"); 

    if (view.getMap() == null) { 
     view.setMap(new Mapper() { 
      @Override 
      public void map(Map<String, Object> document, Emitter emitter) { 
       if (document.get("type") != null) { 
        if (document.get("type").equals("Transaction")) { 
         Calendar dataCalendar = Calendar.getInstance(); 

         /* due to too long the code, */ 
         /* I have break it to 2 lines */ 
         Long endDateTime = 
         Long.parseLong(document.get("endDatetime")); 

         dataCalendar.setTimeInMillis(endDateTime); 

         List<Object> key = new ArrayList<>(); 
         key.add(dataCalendar.get(Calendar.YEAR)); 
         key.add(dataCalendar.get(Calendar.MONTH) + 1); 
         key.add(dataCalendar.get(Calendar.DAY_OF_MONTH)); 

         HashMap<String, Object> value = new HashMap<>(); 
         value.put("_id", document.get("_id")); 

         emitter.emit(key, value); 
        } 
       } 
      } 
     }, "1"); 
    } 

    return view; 
} 


/* The query part */ 
Query query = getViewTransactionByEndDate().createQuery(); 

Calendar todayCalendar = Calendar.getInstance(); 
todayCalendar.setTime(new Date()); 

List<Object> key = new ArrayList<>(); 
key.add(todayCalendar.get(Calendar.YEAR)); 
key.add(todayCalendar.get(Calendar.MONTH) + 1); 
key.add(todayCalendar.get(Calendar.DAY_OF_MONTH)); 

query.setKeys(key); 

QueryEnumerator queryEnumerator = query.run(); 

回答