Couchbase Lite Java:创建视图&使用精确密钥进行查询

时间:2017-05-27 16:06:32

标签: java couchbase-lite

我正在尝试根据自己的自定义视图进行查询,但它并没有达到我的预期。

我想查询密钥示例如[“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();

1 个答案:

答案 0 :(得分:0)

我自己找到了答案:

对于那些寻找类似问题解决方案的人,请参阅以下内容:

Query multiple keys in couchbase lite view