Имеет ли Firebase такую ​​же функцию, как Cloud Firestore, которая запрашивает данные, похожие на массивы? - PullRequest
0 голосов
/ 10 мая 2018

в облачном магазине пожаров

public class MapPost {
    String title;
    Map<String,Boolean> categories;

    public MapPost(String title, Map<String,Boolean> categories) {
        this.title = title;
        this.categories = categories;
    }
}

Map<String, Boolean> categories = new HashMap<>();
categories.put("technology", true);
categories.put("opinion", true);
categories.put("cats", true);
MapPost myMapPost = new MapPost("My great post", categories);

запрос, подобный этому

db.collection("posts")
        .whereEqualTo("categories.cats", true)
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            // ...
        });

Имеет ли база данных Firebase Realtime ту же функцию, что и Cloud Firestore, которая запрашивает данные, подобные массиву?

public class MapPost {
        String title;
        String body;
        int starCount;
        String uid;
        Map<String,Boolean> stars;

        public MapPost(String title, String body, int starCount, String body ,Map<String,Boolean> categories) {
            this.title = title;
            this.body = body;
            this.starCount = starCount;
            this.stars = stars;
        }
    }


--posts
----LC1inGwV9KXD
------body: "111"
------starCount:1
------stars
---------8prHpTdTHI2: true
------title: "test1"
------uid: "8tprHpTdTHI2"

Предполагается, что пользователь "8prHpTdTHI2" просмотрел 200 сообщений и 30 сообщений

в Cloud Firestore Я могу запросить 30 пост по

db.collection("posts")
        .whereEqualTo("stars.8prHpTdTHI2", true)
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            // ...
        });

я могу сделать это в Firebase?

1 Ответ

0 голосов
/ 11 мая 2018

Если я не ошибаюсь, вы можете выполнить такой запрос в FirebaseFirestore.В любом случае, помните, что Firestore не работает с массивами, он работает с наборами информации, такими как карты.

О вашем запросе вы сможете использовать whereEqualTo(""stars.8prHpTdTHI2", true).Он будет использовать 8prHpTdTHI2 как ключ для созданной карты и проверит, является ли значение true или нет.Также вам нужно будет добавить индекс в вашей консоли Firebase для этого запроса.В любом случае, IDE выдаст вам ошибку со ссылкой для автоматического создания этого индекса при первой попытке его выполнения.

Проверьте один из примеров, приведенных в документации по этому виду запроса.:

db.collection("posts")
        .whereEqualTo("categories.cats", true)
        .get()
        .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            // ...
        });

В данном случае categories.cats - это карта, созданная для объекта Post:

Map<String, Boolean> categories = new HashMap<>();
categories.put("technology", true);
categories.put("opinion", true);
categories.put("cats", true);

Надеюсь, что она вам поможет.Также вы можете узнать больше о том, как работать с массивами в Firestore, в: https://firebase.google.com/docs/firestore/solutions/arrays

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