Как обновить документ в firestore?

#javascript #firebase #google-cloud-firestore

#javascript #firebase #google-облако-firestore

Вопрос:

Я прочитал какой-то пост о том, как обновить документ в firebase, но у меня это не работает. У пользователя есть возможность добавить документ в свою базу данных, и у него должна быть возможность обновить эту запись. Вот мой код на данный момент…

 const form = document.querySelector('#database');

form.addEventListener('submit', (e) => {
    e.preventDefault();
    db.collection('database').add({
        field1: form.field1.value,
        field2: form.field2.value 
    });
    db.collection('database').update({
        field2: form.field2.value
    });
})
  

Ответ №1:

Ваш add работает, потому что вы создаете новый документ в этой коллекции. С другой стороны, когда вы пытаетесь update , вы должны указать, какой конкретный документ вы хотите обновить … обновление a collection не имеет смысла, вы должны ориентироваться на a document .

Обратите внимание на разницу в примерах, приведенных в официальных документах для создания нового документа в коллекции через add :

 // Add a new document with a generated id.
db.collection("cities").add({
    name: "Tokyo",
    country: "Japan"
})
  

в сравнении с примером обновления конкретного документа:

 // Set the "capital" field of the city 'DC'
db.collection("cities").doc("DC").update({
    capital: true
})
  

Обратите внимание, как update нацелен на конкретный документ? Это то, что вам нужно сделать. Я настоятельно рекомендую вам просмотреть официальные документы для получения дополнительных примеров, они довольно полезны.

Редактировать:

Чтобы отредактировать документ, вам нужно знать его название… вы можете либо запросить коллекцию, чтобы узнать имя, либо вы могли бы использовать следующий метод добавления нового документа, где вы можете сами задать имя. В этом примере они создают новый документ «LA» со свойствами name, state и country:

 db.collection("cities").doc("LA").set({
    name: "Los Angeles",
    state: "CA",
    country: "USA"
})
  

Таким образом, вы узнаете имя вашего документа. Используя add синтаксис, Firebase автоматически сгенерирует имя нового документа.

Комментарии:

1. Я прочитал это, но для меня это совсем не полезно, потому что я пытаюсь найти решение, как выбрать конкретный документ и обновить его. В сети есть несколько примеров, но все они предназначены для решения для Android, мне это нужно для веб-решения. Если у меня есть список документов, как выбрать какой-то конкретный документ и обновить его?

2. @Magnus обновил ответ, чтобы немного помочь вам.

3. Хорошо, а если я хочу редактировать состояние, а не другие поля? Я не уверен, что вы меня понимаете… Пользователь вставляет свой документ с деталями (имя, штат, страна), и он хочет изменить некоторую информацию, не весь документ, а только конкретную деталь (состояние). Как выбрать это конкретное поле и отредактировать его?

4. @Magnus Команда update достаточно умна, чтобы не перезаписывать другие поля. Если вы скажете, .update({ state: "NY" }) тогда он обновит state до «NY» и оставит name и country нетронутыми.

5. Да, но это должен делать пользователь во внешнем интерфейсе. Когда я напишу этот метод для поля «состояние», он запишет новый документ, он не обновит существующий. Вы рассказываете мне все, что я могу найти в документации, но нет объяснения, как это сделать на практике. Итак, при отправке пользователь создаст новый документ, он не может редактировать существующий документ, что ему нужно сделать. Мне нужен совет, как это сделать…