NodeJS 如何使用云函数从Firestore文档的Map中删除一个条目

iyfjxgzm  于 2023-01-16  发布在  Node.js
关注(0)|答案(1)|浏览(201)

如何使用云函数从Firestore文档的Map中删除一个字段?
我的文档"/groups/{groupId} "如下所示:

{
  members: {
    userIdOfUserA: {
      <some fields that contain info about user A>
    },
    userIdOfUserB: {
      <some fields that contain info about user B>
    }
  }
}

函数如下所示:

const functions = require("firebase-functions")

exports.deleteUserProfileFromGroup = functions.firestore
  .document("/groups/{groupId}/members/{userid}")
  .onDelete((snapshot, context) => {
    const admin = require("firebase-admin")
    admin.initializeApp()

    const docRef = admin.firestore().doc("groups/" + context.params.groupId)
    return docRef.update({
      members: admin.firestore
        .FieldValue
        .delete(context.params.userId)
    })
  })

如果正在删除文档"groups/{groupId}/members/userIdOfUserA",则会正确触发该函数,但它不是仅从Map中删除键"userIdOfUserA"及其数据,而是删除整个"members"Map。
所以我想这是错误的函数,或者是错误的方法,我把密钥输入到函数中,但是我找不到任何正确的方法。
任何帮助都感激不尽。

s3fp2yjn

s3fp2yjn1#

谢谢你做我的橡皮鸭!我记得Map值是可以直接访问的。下面是通过键从Map中删除字段的方法:

const functions = require("firebase-functions")

exports.deleteUserProfileFromGroup = functions.firestore
  .document("/groups/{groupId}/members/{userid}")
  .onDelete((snapshot, context) => {
    const admin = require("firebase-admin")
    admin.initializeApp()

    const docRef = admin.firestore().doc("groups/" + context.params.groupId)
    return docRef.update({
      [`members.${context.params.userId}`]: admin.firestore
        .FieldValue
        .delete()
    })
  })

相关问题