广告:我正在使用couchbaselite android 1.4.0,我还没有准备好切换到2.0。
获取我的问题的上下文:
- 我有2种文档类型:
PATIENT
&VISIT
- 患者与访问
visitId
的访问有关 - 访问有
startDateTime
和endDateTime
- 如果
endDateTime
为null或缺少
,则将访问视为"打开"> - 通过字段
visitType
,访问可以是不同类型的访问 - 访问可以通过字段
inactive
进行访问
我想:
- 让所有类型的所有开放和主动访问中的所有患者(ID 名称(
- 结果是使用
skip
和limit
分页的 - 获取结果按名称 排序
我设法获得了所有正确的患者并为结果划分了结果,但问题是分类。由于分页为分页,我无法进行"帖子排序"(按随机顺序获取结果,然后使用自制方法进行分类(。
所以这是它实际上在没有排序的情况下工作的方式:
地图/降低
if (isVisit()) {
Object inactive = document.get(FIELDS.INACTIVE);
if(inactive == null)
inactive = false;
Document patientDoc = database.getExistingDocument(FIELDS.PATIENT_ID);
if(patientDoc != null && patientDoc.getProperties() != null) {
Object[] keys = {
document.get(CouchbaseVisitManager.FIELDS.STOP_DATE_TIME),
inactive,
document.get(CouchbaseVisitManager.FIELDS.VISIT_TYPE)
};
Object[] values = {
document.get(FIELDS.PATIENT_ID),
patientDoc.getProperties().get(FIELDS.FAMILY_NAME),
patientDoc.getProperties().get(FIELDS.FIRST_NAME)
}
emitter.emit(keys, values);
}
}
查询
Query query = getQuery(Views.PATIENTS_CURRENTLY_IN_VISIT); //Helper method to create a query
query.setKeys(new ArrayList<Object>(){{
add(new ArrayList<Object>(){{
add(null);
add(false);
add(visitType);
}});
}});
query.setSkip(skip);
query.setLimit(limit);
这可以很好地吸引我的患者,但不能对他们进行分类。
我试图在视图中添加患者名称:
Object[] keys = {
patientDoc.getProperties().get(FIELDS.FAMILY_NAME),
patientDoc.getProperties().get(FIELDS.FIRST_NAME),
document.get(FIELDS.STOP_DATE_TIME),
inactive,
document.get(FIELDS.VISIT_TYPE)
};
并这样更新我的query.keys
:
query.setStartKey(new ArrayList<Object>(){{
add(null);
add(null);
add(null);
add(false);
add(visitType);
}});
query.setEndKey(new ArrayList<Object>(){{
add(new HashMap<>());
add(new HashMap<>());
add(null);
add(false);
add(visitType);
}});
,但这没有病人(结果= 0(
所以...我不知道如何实现我的目标。我竭尽全力按值进行排序,但似乎还不存在(我认为应该等待2.0(。但是他们的解决方案是实现这种行为吗?
感谢阅读。
视图结果始终按键排序。因此,您应该将患者名称添加到键,然后将其分类。
要小心将名称放入键阵列的正确位置,因为排序是词典,即如果名称将是最后一个组件,那么您将获得所有按名称排序的not活动,然后全部打开主动用名称E.T.C。
排序如果您需要将姓名密钥放在其他键前,但仍然能够过滤您的结果,那么您将需要正确构建start键和结束键,以便每个可能的患者的全部范围将在后来的密钥被过滤时接受名称。您将必须提供一些肯定比任何可能的患者名称的值。
遵循为Couchbase视图定义的键排列,null
始终小于任何字符串,并且可以使用一个空的MAP {}
来匹配最后一个字符串。您基本上是在上一个样本中进行的。如果您想以反向模式查询视图
要考虑的另一件事是在更改其逻辑或密钥集后始终增加视图的版本,否则您将继续获得旧的结果。增加版本将迫使视图刷新,并在所有数据上执行更新的逻辑。