Проверьте наличие документа в Firestore - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь выяснить, существует ли какой-либо элемент в моей базе данных.

Если его нет, я бы хотел добавить его.

Если он существует, мне бы хотелосьпоказать сообщение.

Код, который я использую:

CollectionReference colRefMyBooks = db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" );
Query queryMyBooks = colRefMyBooks.whereEqualTo("BookID", bookId);
queryMyBooks.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            for (QueryDocumentSnapshot document : task.getResult()) {
                Toast.makeText(BookDetailActivity.this, "Book already in my list", Toast.LENGTH_SHORT).show();
            }
        } else {
            db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" ).add( general_book );
        }
    }
});

Этот код хорошо работает, пока существует коллекция "MyBooks". Однако, если нет коллекции "Mybooks", я хочу, чтобы она считала ее неуспешной и, следовательно, добавила элемент.

Что я получаю, так это то, что она пропускает весь объект onComplete и поэтому неДобавить что-нибудь.

Значит ли это, что я должен сначала проверить, существует ли коллекция, и внутри нее, если документ?

Спасибо

1 Ответ

0 голосов
/ 17 октября 2019

Запрос, который не находит документов, всегда будет считаться «успешным», независимо от того, существуют ли какие-либо коллекции. Это поведение нельзя изменить.

Вместо этого вам нужно будет проверить, нет ли документов в наборе результатов, и решить, что вы хотите оттуда делать:

queryMyBooks.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            QuerySnapshot snapshot = task.getResult();
            if (snapshot.isEmpty()) {
                db.collection( "Users" ).document( auth.getUid() ).collection( "MyBooks" ).add( general_book );
            }
            else {
                for (QueryDocumentSnapshot document : snapshot) {
                    Toast.makeText(BookDetailActivity.this, "Book already in my list", Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
});

Обратите внимание, что коллекции на самом деле не существуют. Нет операций по добавлению или удалению коллекций. Есть только операции по изменению документов. Коллекция появляется в консоли, только если она содержит хотя бы один документ. Если он не содержит документов, он просто исчезает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...