首页 > 解决方案 > Android Cloud Firestore 将新项目添加到文档子列表

问题描述

我需要将一个项目添加到我的文档中的列表中。不幸的是,我的代码总是覆盖旧值。如何更改代码以始终添加新项目?

  db = FirebaseFirestore.getInstance();
    String userid = FirebaseAuth.getInstance().getCurrentUser().getUid();

    db.collection("Users").document(userid);

    Map<String, Object> docData = new HashMap<>();

    Map<String, Object> nestedData = new HashMap<>();
    nestedData.put("Ernährung2", true);


    docData.put("channelAbos", nestedData);
    db.collection("Users").document(FirebaseAuth.getInstance().getCurrentUser().getUid())
    .set(docData);

标签: androidgoogle-cloud-firestore

解决方案


根据文档,使用一个参数调用的 set() 每次都会覆盖整个文档。

如果文档不存在,则会创建它。如果文档确实存在,则其内容将被新提供的数据覆盖

如果要向现有列表添加值,则应使用 FieldValue.arrayUnion() ,如文档同一页面中所述:

如果您的文档包含数组字段,您可以使用 arrayUnion() 和 arrayRemove() 添加和删除元素。arrayUnion() 将元素添加到数组中,但只添加不存在的元素。

我会指出,您现在使用 Map 所做的事情将创建一个对象,而不是一个列表。请确定您有一个列表/数组类型字段,而不是要使用的对象。


推荐阅读