【问题标题】:How to Add/Update/Remove array elements in firebase firestore android using Hashmap? A Store Database如何使用Hashmap在firebase firestore android中添加/更新/删除数组元素?商店数据库
【发布时间】:2018-12-14 14:02:18
【问题描述】:

我想做一个用户的集合,用户会有多个存储作为文档,每个文档都有storeName、storeAddress和availableProducts等字段。我的问题是如何管理 availableProducts 数组?我知道 Firestore 不能处理数组,我应该使用 HashMap。我的可用产品可能有产品名称、产品价格等字段。我是 Firebase 的新手,如何在 Android Studio 中使用 java 管理 availableProduct 数组?

FireBase Firestore DataBase Image

【问题讨论】:

  • 您是在问如何收集这些数据并将其放入数组中,还是应该使用地图?或者您如何为该快照使用地图?
  • 我应该使用地图还是子集合?
  • 就个人而言,我会使用地图,因为它更有意义和更容易。哪种方式更好,有待解释。您可能想要创建一个 availableProduct 类,但 Map 也可以正常工作。

标签: java android firebase google-cloud-firestore


【解决方案1】:

好消息伙计们,通过对数组的最新改进,您可以添加、更新和删除数组元素。

查看这篇博文:Better Arrays in Cloud Firestore!

你可以这样做

//Map to add user to array
final Map<String, Object> addUserToArrayMap = new HashMap<>();
addUserToArrayMap.put("arrayOfUsers", FieldValue.arrayUnion(mAuth.getCurrentUser().getUid()));

//Map to remove user from array
final Map<String, Object> removeUserFromArrayMap = new HashMap<>();
removeUserFromArrayMap.put("arrayOfUsers", FieldValue.arrayRemove(mAuth.getCurrentUser().getUid()));

//use either maps to add or remove user
db.collection("REFERENCE").document("mDocumentId")
                .update(addUserToArrayMap);

【讨论】:

  • 真的很感激这个人。这对于有向上或向下两个选项的投票后系统来说是完美的。但是,您将如何进行查询以获取每个州的最终选民人数(上升或下降)?我目前会在用户投票时添加一个,但这显然并不完美
  • @speedox 看来您想要的是实时数据。这是一个指向 firebase 文档的链接,以实现 firebase.google.com/docs/firestore/query-data/…
【解决方案2】:

这是您可以将新项目添加到文档中现有集合的方法:

FirebaseFirestore.getInstance().collection("COLLECTION_NAME").document("DOCUMENT_ID").update("NAME_OF_COLLECTION_NODE",FieldValue.arrayUnion(NEW_VALUE_OF_ANY_TYPE))

查看此链接了解更多信息:https://firebase.googleblog.com/2018/08/better-arrays-in-cloud-firestore.html

【讨论】:

    【解决方案3】:

    编辑:2018 年 9 月 12 日

    从August 28, 2018 开始,现在可以更新数组成员。更多信息here。


    如何在 firebase firestore 中添加/更新/删除数组元素?

    简短的回答是你不能!如official documentation 中关于数组的:

    虽然 Cloud Firestore 可以存储数组,但 it does not support 查询数组成员或更新单个数组元素。

    因此,目前无法在 Cloud Firestore 数据库中添加、更新或删除单个数组元素。

    看到您的数据库架构,我可以说您没有任何数组。 availableProducts 是一个对象,在它下面有一个名为 0 的映射,它包含两个字符串属性,spName 和 spPrice。如果你想更新,比方说价格,请使用以下代码:

    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    DocumentReference ref = rootRef.collection("gdgsghs.cok").document("Shsheg");
    Map<String, Object> availableProducts = new HashMap<>();
    Map<String, Object> zeroMap = new HashMap<>();
    Map<String, Object> product = new HashMap<>();
    product.put("spPrice", 63.121);
    zeroMap.put("0", product);
    availableProducts.put("availableProducts", zeroMap);
    ref.set(availableProducts, SetOptions.merge());
    

    您的价格将从67.368 更新为63.121。

    【讨论】:

    • 感谢您的回答,但是如何检索产品价格?
    • 这基本上是另一个问题。为了遵守本社区的规则,请再发一个新问题,以便我和其他用户可以帮助您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    相关资源
    最近更新 更多