gpt4 book ai didi

android - 如何创建数组(如果尚不存在),然后将数据附加到Firestore中的数组?

转载 作者:行者123 更新时间:2023-12-02 13:10:44 24 4
gpt4 key购买 nike

引用"Update elements in an array:
我可以理解如何向现有数组添加元素。但我想创建一个新数组(如果尚不存在),然后在单个Firestore调用中向其中添加数据。怎么做?

  • 如果不存在数组,则不添加数据。 .update("arrayName", FieldValue.arrayUnion("arrayData"))
  • 如果不存在,则创建一个新数组并添加数据,但数据将被覆盖而不附加。 .set(hashMapOf("arrayName" to arrayListOf("arrayData")), SetOptions.merge())

  • 我想打一个 单个 Firestore call ,
  • 如果不创建新数组,则检查是否存在数组。
  • 然后,如果没有将数据添加到数组中,它将检查数组中是否存在数据。

  • 是否有一个简单的解决方案,或者我们必须打多个电话才能实现这一目标?
    编辑:
    我正在使用的代码:
    return firebaseFirestore
    .collection("collection1")
    .document("document1")
    .collection("collection2")
    .document("document2")
    .update("arrayName", FieldValue.arrayUnion("arrayData"))
    如您所指出的,@ Alex将创建数组(如果不存在),并向其中添加数据。
    发现我的问题是由于其他问题引起的。
    在我的场景中,尚未创建“collection1”,“document1”,“collection2”和“document2”。只有在要向其添加数组的文档(“文档”)已经创建的情况下,我的代码才有效。
    您能帮我解决这个问题吗?

    最佳答案

    1. Doesn't add data if an array is not present.

    是的,它确实。根据有关FieldValue的 arrayUnion()方法的官方文档:

    Returns a special value that can be used with set() or update() that tells the server to union the given elements with any array value that already exists on the server. Each specified element that doesn't already exist in the array will be added to the end. If the field being modified is not already an array it will be overwritten with an array containing exactly the specified elements.


    换句话说,如果您的 arrayName属性不是数组,那么您的 arrayData将被添加到数组中,然后该数组将在文档中被覆盖。因此,如果您的 arrayName不是数组,它将成为数组。如果属性不存在 而不存在,则将创建一个新数组并将其添加到文档中。因此,如果您的文档如下所示:
    Firestore-root
    |
    --- firstCollection
    |
    --- firstDocument
    |
    --- docName: "Doc Name"
    使用以下代码行之后:
    FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
    DocumentReference docRef = rootRef.collection("firstCollection").document("firstCollection");
    docRef.update("arrayName", FieldValue.arrayUnion("arrayData"));
    您的文档将如下所示:
    Firestore-root
    |
    --- firstCollection
    |
    --- firstDocument
    |
    --- docName: "Doc Name"
    |
    --- arrayName: ["arrayData"]
    编辑:

    My code works only if the document to which the array is to be added ("document") is already created.


    是的,这是预期的行为。您 无法更新不存在的文档中的数组。为了解决这个问题,您应该基本上创建该文档,并至少具有一个属性,使其存在于该特定位置。该属性可以是一个空数组或任何其他 supported data-type,因为它将稍后转换为数组。
    一个更合适的解决方案可能是检查文档是否存在。如果存在,则将其添加到所需的数组,否则,对其进行更新。但是您不可能一口气做到这一点。

    关于android - 如何创建数组(如果尚不存在),然后将数据附加到Firestore中的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63335716/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com