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 删除多个字段的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Flutter 在 Firestore 中删除具有特定值的多个文档