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()
})
我有一个火炉。我正在尝试从文档 '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()
})