【问题标题】:How update an array in a map using arrayUnion?如何使用 arrayUnion 更新地图中的数组?
【发布时间】:2019-06-08 23:49:28
【问题描述】:

在 Firestore 中,我有一个文档,其中包含一个名为 myMap 的地图,其中包含一个名为 myArr 的数组字段。

是否可以在事务中使用arrayUnion 来更新myArr,通过向其中添加一个元素?

await admin.firestore().runTransaction(async (transaction: Transaction) => {
    //

    const docRef: DocumentReference = admin.firestore()
        .doc(`collection/document`);

    const doc: DocumentSnapshot = await transaction.get(docRef);

    if (doc.exists) 
        await transaction.update(docRef,
            {'myMap': {'myArr': FieldValue.arrayUnion('myNewValue')},}
        );

});

我认为上面的代码应该添加myArr,但它会替换整个数组。

我做错了什么?

【问题讨论】:

    标签: typescript firebase google-cloud-firestore


    【解决方案1】:

    FieldValue.arrayUnion()FieldValue.arrayRemove() 仅在更新对象的顶层中标识的字段本身是一个列表时才有效。您现在通过为对象提供列表所做的确实是替换整个列表。它不会识别该列表的现有内容。

    你可以做的是调出嵌入列表的具体名称:

        await transaction.update(docRef,
            {'myMap.myArr': FieldValue.arrayUnion('myNewValue')},}
        );
    

    注意点符号,用于专门调用列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-22
      • 2023-02-21
      • 2019-09-05
      • 2020-10-28
      • 2022-06-12
      • 2020-03-02
      • 1970-01-01
      • 2014-12-22
      相关资源
      最近更新 更多