如何在不覆盖的情况下向 Firebase Firestore 添加值?

我有两个活动,我正在从这两个活动分别向Firestore添加数据。但是,每当我将第二个活动数据添加到Firestore时,它都会覆盖第一个活动数据。我在两个活动中使用了下面的代码:

 firebaseFirestore.collection("Users").document(user_id).set(data)

如何停止覆盖?我想将两个活动数据保存在同一个.user_id


答案 1

有两种方法可以实现此目的。第一个是使用:Map

Map<String, Object> map = new HashMap<>();
map.put("yourProperty", "yourValue");
firebaseFirestore.collection("Users").document(user_id).update(map);

如您所见,我使用了方法而不是方法。update()set()

第二种方法是使用模型类的对象,如下所示:

YourModelClass yourModelClass = new YourModelClass();
yourModelClass.setProperty("yourValue");
firebaseFirestore.collection("Users").document(user_id)
    .set(yourModelClass, SetOptions.mergeFields("yourProperty"));

如您所见,我使用了该方法,但我已作为 第二个参数 ,这意味着我们仅在特定字段上进行更新。set()SetOptions.mergeFields("yourProperty")


答案 2

我建议您再添加一个文档或集合,以便它能够为单个用户存储多个仅一个数据值。
您可以为这两个活动创建文档引用:

firebaseFirestore.collection("Users").document(user_id+"/acitivity1").set(data);
//and  
firebaseFirestore.collection("Users").document(user_id+"/acitivity2").set(data);

或者,您可以为其创建子集合:

firebaseFirestore.collection("Users").document(user_id)
                  .collection("Activities").document("acitivity1").set(data);
//and
firebaseFirestore.collection("Users").document(user_id)
                  .collection("Activities").document("acitivity2").set(data);

有关那里的分层数据的更多信息


推荐