如何将值推送到云端防火墙中的文档中的数组字段?

时间:2018-05-13 17:00:49

标签: java android firebase google-cloud-firestore

我是Cloud Firestore的新手,我想在我的Android应用中实现最喜欢的动作。我有一个餐厅列表,每个餐厅都有一个最喜欢的动作。

因此,一旦用户点击收藏夹按钮,我应该在Firestore的列表中针对该用户保存餐馆的名称。

在使用餐厅之后,用户还可以点击不受欢迎的按钮,然后我应该从列表中删除该用户的条目。

我是用SQLite完成的,任何人都可以帮我在Cloud Firestore中做这件事吗?

1 个答案:

答案 0 :(得分:1)

要将餐馆保存为收藏,您需要在每个用户文档下创建Map而不是数组。根据{{​​3}}:

  

虽然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);