Cloud Firestore получить коллекцию по ссылке из другой коллекции - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть коллекция с именем Products, а другая с именем Category.

Products в документе есть поле idCategory, ссылающееся на идентификатор категории.

Я хочу получитьвсе документы из Products, где название категории равно "Сода".

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Я хочу получить все документы из Продуктов, название категории которых равно "Сода".

Поскольку у вас нет всех данных в одном документе, вам нужно запроситьВаша база данных дважды.Один раз, чтобы получить идентификатор категории, которая в данном случае является «Сода», а затем на основе этого идентификатора получить соответствующие продукты.Это связано с тем, что Firestore не поддерживает запросы из нескольких коллекций.В одном запросе могут использоваться только свойства документов в одной коллекции.

Зачем запрашивать базу данных дважды, что обходится дорого, когда вы можете запросить один раз и получить нужные документы.Для этого вам нужно внести небольшие изменения в схему базы данных.Поскольку один продукт может принадлежать нескольким категориям, ваша новая схема должна выглядеть следующим образом:

Firestore-root
    |
    --- products (collection)
          |
          --- productId (document)
                |
                --- productName: "Soda Water"
                |
                --- category: ["Soda", "Other Category"]
                |
                --- //Other properties

Чтобы получить все документы, относящиеся к категории Soda, используйте следующие строки кода:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference productsRef = rootRef.collection("products");
Query query = productsRef.whereArrayContains("category", "Soda");

Редактировать: Вы также можете хранить ссылки вместо только идентификаторов, но для этого, пожалуйста, смотрите мой ответ из этого сообщения .

0 голосов
/ 21 декабря 2018

Похоже, вы бы сделали простой запрос ( Справочник по Firebase Docs ):

FirebaseFirestore db = FirebaseFirestore.getInstance();

CollectionReference productsRef = db.collection("Products");

Query query = productsRef.whereEqualTo("idCategory", "Soda");

query.get()
.addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
    @Override
    public void onSuccess(QuerySnapshot queryDocumentSnapshots) {
        /// do things with response
    }
})
.addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception e) {
        /// do things with error
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...