Google Firestore 正在删除多个字段

Google Firestore Deleting Multiple Fields

我有一个火炉。我正在尝试从文档 'idAvailable' 中删除特定记录。但是,当我们点击此端点时,id 不会从 idAvailable table 中删除:http://localhost:5001/us-central1/reserveId,它在下面的代码片段中定义。

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())

不从集合中删除。

为什么会这样?

您是否要从数组中删除项目?您可以改用 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
  })
});

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


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

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