Удалите поле из 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()
        });