Google Firestore 删除多个字段

Posted

技术标签:

【中文标题】Google Firestore 删除多个字段【英文标题】:Google Firestore Deleting Multiple Fields 【发布时间】:2021-11-21 21:19:15 【问题描述】:

我有一个火库。我正在尝试从文档“idAvailable”中删除特定记录。但是,当我们点击这个端点时,id 并没有从 idAvailable 表中删除:http://localhost:5001/us-central1/reserveId,它在下面的代码 sn-p 中定义。

exports.reserveId = functions.https.onRequest(async (req, res) => 
  cors(req, res, ()=> 
    const documentId = "idAvailable"
    const setReserved = "idReserved"
    admin.firestore().collection("Vacancy").doc(documentId).get().then(doc => 

      const field = doc.data().ar[0]
      console.log("Field " + JSON.stringify(field))

      // No error but doesn't execute correctly
      const doDelete = db.collection("Vacancy").doc(documentId).update(field, admin.firestore.FieldValue.delete())

    res.send(doc.data().ar[0])

    ).catch(error => 
      res.send(error)
    )
  )
);

具体来说,这一行:

const doDelete = db.collection("Vacancy").doc(documentId).update(field, admin.firestore.FieldValue.delete())

不会从集合中删除。

为什么会这样?

【问题讨论】:

【参考方案1】:

您是否要从数组中删除项目?您可以改用arrayRemove。你也可以使用async-await 语法,因为你的函数是异步的:

exports.reserveId = functions.https.onRequest(async (req, res) => 
  cors(req, res, async () => 
    const documentId = "idAvailable"
    const setReserved = "idReserved"
    
    const snap = await admin.firestore().collection("Vacancy").doc(documentId).get()
    const field = snap.data().ar[0] // value of that array item
   
    await db.collection("Vacancy").doc(documentId).update( ar: admin.firestore.FieldValue.arrayRemove(field) )

    res.send(doc.data().ar[0]) // response body is deleted from array
  )
);

请注意,如果您知道要删除的项目的值(完全相同的对象/字符串),那么您可以直接使用 arrayRemove 而无需先获取文档。


如果你想删除多个字段,那么你可以像这样传递一个对象:

await db.collection("Vacancy").doc(documentId).update( 
  field1Name: admin.firestore.FieldValue.delete(),
  field2Name: admin.firestore.FieldValue.delete()
)

【讨论】:

以上是关于Google Firestore 删除多个字段的主要内容,如果未能解决你的问题,请参考以下文章

使用nodejs从firestore文档中删除字段

如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档

在 Google Datastore/Firestore 中索引布尔字段是不是安全?

Cloud Firestore 更改字段名称

Firestore 不合并特定的地图字段

Firestore - 删除对象内的字段