Как отфильтровать данные Firebase в Swift от другого родителя? - PullRequest
0 голосов
/ 07 июня 2018

Оригинал: я столкнулся с чем-то, что не могу понять: у меня есть список клиентов с их данными, и у меня есть список по календарным датам, когда клиенты отмечены как доступные в Firebase.И мне нужно выяснить, как я могу исключить клиента на основе календаря.Я искал вокруг и нашел этот вопрос, который почти отвечает на мой вопрос:

ОБНОВЛЕНО: теперь я изменил свою базу данных Firebase, чтобы не приходилось разлучать родителей, но включить ее в клиентов

Как отфильтровать данные Firebase в Swift?

        // This is my new code from the link above
        ref.child("customers").queryOrdered(byChild: "calendar").
        queryEqual(toValue: true).observe(.childAdded, with: { snapshot in


        let snapshotDict = snapshot.value as? NSDictionary

            let name = snapshotDict?["Name"] as! String
            let email = snapshotDict?["Email"] as! String
            let rating = snapshotDict?["Rating"] as! String
            let key = snapshot.key

            self.posts.insert(postStruct(name: name, email: email, rating: rating, key: key), at: 0)
            self.tableView.reloadData()

Так что если бы я только проверял, если значение "calendar" = true, это сработало бы.Но у меня есть несколько ключей и значений в календаре, и я не знаю следующий шаг для этого.Моя база данных выглядит так:

    customers:
      - sk1239sdkq2312lk
            - calendar
                  - 9. june, 2018
                       - 1 : 10:00    
      - lk3j4590gsdflkj2
            - calendar
                  - 9. june, 2018
                       - 1 : 10:00    
      - x98123jasdhasdss
            - calendar
                  - 9. june, 2018
                       - 3 : 12:00    

И я хочу вставить только двух первых клиентов, у которых в таблице 9 июня, 2018 и 1: 10:00.

У меня есть дата (9 июня 2018 г.) и время (10:00), которое я ищу, но не число (1, 2, 3).

Как мне это сделать?этот?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Это, кажется, сводится к правильной архитектуре вашей базы данных.Как только это будет сделано, это должно быть легко.Во-первых, используйте Firestore, если нет веской причины не делать этого.... При условии, что вы можете использовать Firestore, похоже, что у вас есть (довольно стандартный) коллекция корневого уровня users, где у каждого user есть (под) коллекция, называемая operating, полная документов с uid.У каждого документа есть свойство под названием activity, которое может быть "встреча", "отпуск" или "занят" и т. Д.

Я делаю что-то похожее для хранения мест доставки своих пользователей.

Firestore поддерживает составные запросы , поэтому заполнение календаря должно быть довольно простым.

enter image description here

0 голосов
/ 08 июня 2018

Ни база данных реального времени, ни облачное хранилище пожаров не поддерживают один запрос к нескольким коллекциям (или подколлекциям).

Вы можете удерживать ссылку на коллекцию календаря и запрашивать ее на стороне клиента после получения всех клиентов.Это имеет очевидные недостатки.

Другой вариант - включить поле внутри модели Customer (например, usedCalendar) по умолчанию в false, а затем использовать Firebase Cloud Functions для сохранения этого поля.значение соответствует.Вы бы добавили хуки onCreate() и onDelete() в коллекцию calendar и обновили бы значение usedCalendar соответствующего клиента.

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