У меня есть простой вид с картографом, который выдает документы с некоторыми ключами.
com.couchbase.lite.View view = database.getView(VIEW_NAME);
if (view.getMap() == null) {
Mapper map = new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if ("user".equals(document.get("type"))) {
emitter.emit(document.get("name"), document);
}
}
};
view.setMap(map, null);
}
Имея это представление, я могу создавать на нем запросы с определенными параметрами, такими как setKeys, startKey, endKey, setDescending, setDescending, setSkip и другими, как описано в Couchbase руководство.
если я напишу
Query query = view.createQuery();
List<Object> keys = new ArrayList<>();
keys.add("User Name");
query.setKeys(keys);
этот запрос вернет все документы, соответствующие ключу «Имя пользователя».
Но я не смог найти простой способ написать запросы, которые исключают (опускают) документы с определенными ключами (например, напротив функции setKeys())
один взлом был обнаружен в Пример ToDoLite Код выглядит следующим образом:
public static Query getQuery(Database database, final String ignoreUserId) {
com.couchbase.lite.View view = database.getView(VIEW_NAME);
if (view.getMap() == null) {
Mapper map = new Mapper() {
@Override
public void map(Map<String, Object> document, Emitter emitter) {
if ("user".equals(document.get("type"))) {
if (ignoreUserId == null ||
(ignoreUserId != null &&
!ignoreUserId.equals(document.get("user_id")))) {
emitter.emit(document.get("name"), document);
}
}
}
};
view.setMap(map, null);
}
Query query = view.createQuery();
return query;
}
Обратите внимание, что представление будет исключать только ключ ignoreUserId, который вы передали ему во время первого вызова, и будет игнорировать все остальные во время следующих вызовов (поскольку представление будет создано только один раз во время первого вызова).
Поэтому вам нужно создать новое представление для каждого ключа, который они хотят опустить. Но если у вас есть много ключей, которые вы хотите исключить или делаете это часто, это будет неэффективно и шаблонно.
Вы знаете какое-нибудь лучшее решение или хак?
Приветствуется любая помощь
Заранее спасибо