Получить документ в Couchbase v2.0

Раньше я использовал com.couchbase.lite: couchbase-lite-android: 2.0.0-DB008 до прошлой недели и знаю, что он, кажется, был удален, потому что я не мог импортировать его в Gradle в студии Android, поэтому мне пришлось использовать последнюю версию couchbase com.couchbase.lite: couchbase-lite-android: 2.0.0-158.

В этой версии я не могу получить документы, потому что у нее нет метода getDocumentId (), и мы не можем использовать database.getDocument (docID);

Это код документа, который я сохранил:

        Document document = new Document();
        document.setInt("RecordType", 100);
        document.setString("Number", "1234567890");
        document.setDate("Date", new Date());
        document.setString("Text", "This is message text.");

        try {
            database.save(document);
            tvResult.setText(document.getId());
        } catch (Exception e) {
            e.printStackTrace();
            Log.e(LOG_TAG, e.toString());
            tvResult.setText(e.toString());
        }

и это код, который должен получить документ:

Query query = Query.select()
            .from(DataSource.database(database))
            .where(
                    Expression.property("RecordType").equalTo(100)
            );

    try {
        ResultSet rows = query.run();
        Result row;
        while ((row = rows.next()) != null) {

            row.hashCode()

            tvResult.append("DocumentID: " + row.getString("documentID") + "\n" +
                    "Number: " + row.getString("Number") + "\n" +
                    "Date: " + row.getDate("Date") + "\n\n"
            );

        }
    } catch (Exception e) {
        Log.e(LOG_TAG, e.toString());
        tvResult.setText(e.toString());
    }

Все строки содержат нулевые данные.

Есть ли способ получить все документы и их идентификаторы?


person Salar Rastari    schedule 13.10.2017    source источник


Ответы (1)


Во-первых, на вашем месте я бы обновился. DB-018 отсутствует, и в каждой версии исправлены значительные ошибки. Но будьте осторожны - DB-013 изменил протокол синхронизации, поэтому вам также необходимо обновить свой сервер.

Во-вторых, начиная с DB017 или DB018, вы ДОЛЖНЫ указать поля, которые хотите получить, иначе результаты поиска будут пустыми строками, как вы видите. Я не уверен, что это задумано или ошибка. Указание "" предоставит вам все поля. Обратите внимание, что он НЕ даст вам документ, он даст вам словарь.

Честно говоря, я считаю, что самый простой способ получить идентификатор - это встроить его в сам документ. Возможно, вы можете запросить какое-то мета-поле, но я понятия не имею, что это такое.

person Gabe Sechan    schedule 13.10.2017
comment
Существует класс Meta, который можно использовать для получения такой информации, как идентификатор. Expression.meta().id или эквивалент - это то, что вы можете поместить в Select. - person borrrden; 14.10.2017