Удалите поле из Firestore с помощью динамической клавиши
Я пытаюсь удалить одно поле из документа в Firestore. Ключ поля хранится в переменной, например
var userId = "random-id-1"
В документе у меня есть поле членов, структурированное следующим образом:
{
members:{
random-id-1:true,
random-id-2:true
}
}
Я хотел бы удалить random-id-1:true
, но сохранить random-id-2:true
Как это возможно без того, чтобы все члены-члены и записывали обновленный объект?
Я пробовал это, но получаю ошибку: Document references must have an even number of segments
и я также пробовал это:
db.collection('groups').doc(this.props.groupId).set({
members: {
[userId]: firebase.firestore.FieldValue.delete()
}
},{merge: true})
Однако я получаю ошибку: Function DocumentReference.update() called with invalid data. FieldValue.delete() can only appear at the top level of your update data
Function DocumentReference.update() called with invalid data. FieldValue.delete() can only appear at the top level of your update data
Спасибо за любую помощь
Ответы
Ответ 1
Мне удалось удалить поле, подобное этому:
let userId = "this-is-my-user-id"
let groupId = "this-is-my-group-id"
db.collection('groups').doc(groupId).update({
['members.' + userId]: firebase.firestore.FieldValue.delete()
})
Это использует описанный здесь метод точечного оператора
Пожалуйста, дайте мне знать, если есть какие-либо альтернативные методы для этого
благодаря
Ответ 2
Мне пришлось импортировать FieldValue
https://firebase.google.com/docs/firestore/manage-data/delete-data#fields
// Get the 'FieldValue' object
var FieldValue = require('firebase-admin').firestore.FieldValue;
// Create a document reference
var cityRef = db.collection('cities').doc('BJ');
// Remove the 'capital' field from the document
var removeCapital = cityRef.update({
capital: FieldValue.delete()
});