Couchbase Lite Java:使用精确键创建视图和查询
Couchbase Lite Java: Creating View & Query with Exact Keys
我正在尝试根据我自己的自定义视图进行查询,但结果并不符合我的预期。
我想查询 ["2017", "5", "26"] 这样的键示例,endDateTime 是我的 Json 数据中的列存储毫秒。
我用 List 发出来存储日期。
当我 运行 我在今天日期之前的查询(数据库确实有我正在搜索的日期的数据)时,我已经使用断点进行调试以检查存储日期的列表,并且查询都是相同。
我找不到 queryEnumerator return 没有行的原因。
请帮助我的问题,我已经尝试了很多方法,但仍然没有成功。
感谢您的帮助。
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();
我自己找到了答案:
想找类似问题解答的朋友,请参考下面:
Query multiple keys in couchbase lite view
我正在尝试根据我自己的自定义视图进行查询,但结果并不符合我的预期。
我想查询 ["2017", "5", "26"] 这样的键示例,endDateTime 是我的 Json 数据中的列存储毫秒。
我用 List 发出来存储日期。
当我 运行 我在今天日期之前的查询(数据库确实有我正在搜索的日期的数据)时,我已经使用断点进行调试以检查存储日期的列表,并且查询都是相同。
我找不到 queryEnumerator return 没有行的原因。
请帮助我的问题,我已经尝试了很多方法,但仍然没有成功。
感谢您的帮助。
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();
我自己找到了答案:
想找类似问题解答的朋友,请参考下面:
Query multiple keys in couchbase lite view