如何在 Couchbase Lite 中按 属性 检索数据?
How to retrieve data by property in Couchbase Lite?
我的文档有 属性 docType,它们根据每种类型的用途(在特定案例模板或审计中)将它们分开。但是,当我执行以下操作时:
document.getProperty("docType").equals("template");
document.getProperty("docType").equals("audit");
它们的结果总是相同的,它 returns 每次存储所有文档时都没有按 docType 过滤它们。
下面,您可以查看查询功能。
public static Query getData(Database database, final String type) {
View view = database.getView("data");
if (view.getMap() == null) {
view.setMap(new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if(String.valueOf(document.get("docType")).equals(type)){
emitter.emit(document.get("_id"), null);
}
}
}, "4");
}
return view.createQuery();
}
有什么提示吗?
这不是一个有效的方法。您的视图函数必须是纯的(它不能引用外部状态,例如 "type")。创建后,您可以通过设置开始键和结束键来查询您想要的内容,或者只是一组一般的键来过滤。
我的文档有 属性 docType,它们根据每种类型的用途(在特定案例模板或审计中)将它们分开。但是,当我执行以下操作时:
document.getProperty("docType").equals("template");
document.getProperty("docType").equals("audit");
它们的结果总是相同的,它 returns 每次存储所有文档时都没有按 docType 过滤它们。
下面,您可以查看查询功能。
public static Query getData(Database database, final String type) {
View view = database.getView("data");
if (view.getMap() == null) {
view.setMap(new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if(String.valueOf(document.get("docType")).equals(type)){
emitter.emit(document.get("_id"), null);
}
}
}, "4");
}
return view.createQuery();
}
有什么提示吗?
这不是一个有效的方法。您的视图函数必须是纯的(它不能引用外部状态,例如 "type")。创建后,您可以通过设置开始键和结束键来查询您想要的内容,或者只是一组一般的键来过滤。