Я столкнулся с проблемой, связанной с запросом базы данных Couchbase lite 1.4 на моем мобильном устройстве Android. Мне кажется, что я не совсем понимаю, как работает запрос с помощью MapReduce Views.
Итак, у меня есть следующие настройки:
1) База данных, которая содержит объекты вроде:
{
dateCreated: 1220227200,
relatedObjectId: "objectId_23445"
type: "mytype"
}
2) Я хотел бы запросить мою базу данных и получить все объекты типа " mytype ", которые связаны с объектом с данным идентификатором ( relatedObjectId поле) и отсортированы по dateCreated поле.
Вот моя функция карты, которая генерирует вид:
public void map(Map<String, Object> document, Emitter emitter) {
if (document.get("type") != null && document.get("type").equals("mytype")) {
List<Object> keys = new ArrayList<Object>();
keys.add(document.get("dateCreated");
keys.add(document.get("relatedObjectId"));
emitter.emit(keys, null);
}
}
3) Эта функция выводит результаты примерно так:
[1220227200, objectId_23445],
[1220227201, objectId_3],
[1220227202, objectId_7],
[1220227203, objectId_8],
[1220227204, objectId_23445]
4) Я хочу получить все объекты с идентификатором " objectId_23445 ", отсортированные по дате, например:
[1220227200, objectId_23445],
[1220227204, objectId_23445]
5) Но в результате я всегда получаю все объекты из базы данных.
First dateCreated , похоже, принимается во внимание, но моя вторая часть ключа ( relatedObjectId ) на самом деле не участвует в фильтрации. Поэтому я всегда получаю список из пункта 3.
Мой запрос выглядит так:
String relatedObjectId = "objectId_23445"
Query query = CouchbaseViews.GetAllMyTypeItems().createQuery();
query.setDescending(true);
ArrayList<Object> startKey = new ArrayList<Object>();
startKey.add(0);
startKey.add(relatedObjectId );
ArrayList<Object> endKey = new ArrayList<Object>();
endKey.add(Calendar.getInstance().getTimeInMillis());
endKey.add(relatedObjectId );
query.setStartKey(endKey);
query.setEndKey(startKey);
Так что мне нужна помощь с этим. По моему мнению, я просто не понимаю, как фильтровать объекты, когда ключ является составным ключом (в моем случае arrayList).
В качестве обходного пути я могу только выдать relatedObjectId и затем отсортировать данные вручную, но это ли правильный способ сделать это?
Любая помощь будет оценена, спасибо заранее!