Как отправить значения в поле массива в документе в облачном хранилище? - PullRequest
0 голосов
/ 13 мая 2018

Я новичок в Cloud Firestore, я хотел реализовать любимое действие в своем приложении для Android.У меня есть список ресторанов, в каждом из которых есть любимое действие.

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

А после того, как сделать ресторан любимым, пользователь также может нажать кнопку «Избранный», тогда я должен удалить эту запись из списка для этого пользователя.

Я сделал это с помощью SQLite, может кто-нибудьпомогите мне сделать это в Cloud Firestore?

1 Ответ

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

Чтобы сохранить ресторан в качестве избранного, необходимо создать Map, а не массив под каждым пользовательским документом. Согласно официальной документации :

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

Итак, ваша структура базы данных должна выглядеть следующим образом:

Firestore-root
    |
    --- users
         |
         --- uid
              |
              --- // user details
              |
              --- favoriteRestaurants
                        |
                        --- restaruantIdOne: true
                        |
                        --- restaruantIdTwo: true

В коде должно выглядеть так:

Map<String, Object> favoriteRestaurants = new HashMap<>();
Map<String, Object> restaurant = new HashMap<>();
restaurant.put("restaruantIdOne", true);
favoriteRestaurants.put("favoriteRestaurants", restaurant);
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
DocumentReference uidRef = rootRef.collection("users").document(uid);
uidRef.update(favoriteRestaurants);

Если вы хотите удалить этот ресторан из избранного, используйте следующий код:

Map<String, Object> restaurant = new HashMap<>();
restaurant.put("favoriteRestaurants.restaruantIdOne", FieldValue.delete());
uidRef.update(restaurant);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...