Java 如何在cloud firestore中将值推送到文档中的数组字段?

Java 如何在cloud firestore中将值推送到文档中的数组字段?,java,android,firebase,google-cloud-firestore,Java,Android,Firebase,Google Cloud Firestore,我是新来的云Firestore,我想在我的Android应用程序中实现最喜欢的操作。我有一张餐馆的名单,每个餐馆都有自己喜欢的活动 因此,一旦用户单击favorite按钮,我应该在Firestore的列表中针对该用户保存餐厅的名称 在使餐厅成为最受欢迎的之后,用户也可以点击“不受欢迎”按钮,然后我应该从该用户的列表中删除该条目 我是用SQLite完成的,有人能帮我在Cloud Firestore中完成吗?要将餐厅保存为收藏夹,需要在每个用户文档下创建一个映射,而不是一个数组。根据: 尽管Clou

我是新来的
云Firestore
,我想在我的Android应用程序中实现最喜欢的操作。我有一张餐馆的名单,每个餐馆都有自己喜欢的活动

因此,一旦用户单击favorite按钮,我应该在Firestore的列表中针对该用户保存餐厅的名称

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


我是用SQLite完成的,有人能帮我在Cloud Firestore中完成吗?

要将餐厅保存为收藏夹,需要在每个用户文档下创建一个
映射,而不是一个数组。根据:

尽管CloudFireStore可以存储数组,但它不支持查询数组成员或更新单个数组元素

因此,您的数据库结构应该如下所示:

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);
在代码中,应如下所示:

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-favorite=newhashmap();
Map restaurant=newhashmap();
餐厅。放置(“restaruantitone”,true);
favoriteRestaurants.put(“favoriteRestaurants”,restaurant);
字符串uid=FirebaseAuth.getInstance().getCurrentUser().getUid();
FirebaseFirestore rootRef=FirebaseFirestore.getInstance();
DocumentReference uidRef=rootRef.collection(“用户”).document(uid);
uidRef.update(优惠餐厅);
如果要从收藏夹中删除该餐厅,请使用以下代码:

Map<String, Object> restaurant = new HashMap<>();
restaurant.put("favoriteRestaurants.restaruantIdOne", FieldValue.delete());
uidRef.update(restaurant);
Map restaurant=newhashmap();
restaurant.put(“favoriteRestaurants.restaruantIdOne”,FieldValue.delete());
uidRef.更新(餐厅);

我可以保存最喜欢的餐厅。但当我为下一家餐厅运行此代码时,它会用新的餐厅条目替换旧的餐厅条目。请小心使用不同的餐厅ID并使用
update
方法,对吗?是的,ID是唯一的。如果我把所有的餐厅都放在“餐厅”地图上,然后更新,这就节省了所有的餐厅。但我需要一次保存一家餐厅,因为用户一次点击一个详细信息页面上的“收藏夹”按钮。请在每次添加一家餐厅的位置共享代码。很高兴听到它成功了!如果你认为我的回答对你有帮助,请考虑投票。谢谢