Как удалить данные из firestore?

У меня есть Коллекция под названием postsCollection, и внутри есть документы, которые я хочу удалить каждый по отдельности.

Коллекция:

Как удалить данные из firestore?

код:

delete () {
  fb.postsCollection.doc().delete().then(function() {
      console.info("Document successfully deleted!");
  }).catch(function(error) {
      console.error("Error removing document: ", error);
  });
}

Я не знаю, как определить doc() ...

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
4 014
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Чтобы удалить любой документ из коллекции, вы должны передать uid этого документа. А затем вызовите метод delete().

var postsRef = db.collection('posts');
var query = postsRef.where('content', '==', 'color..').get()
    .then(snapshot => {
      snapshot.forEach(doc => {
        console.info(doc.id, '=>', doc.data());
        var deleteDoc = db.collection('posts').doc(doc.id).delete();
      });
    })
    .catch(err => {
      console.info('Error getting documents', err);
    });

Вы можете проверить, где находится уникальное поле. В противном случае он удалит все документы, имеющие 'content' equaTo 'color ..'. Точно так же вы можете использовать различные другие предложения, такие как>, <,> = и т. д.

а что такое doc (uid), как бы вы хотели определить uid?

Lukas 01.09.2018 19:47

Если вы хотите удалить текущие данные пользователя, вы можете узнать его uid, вызвав auth.getCurrentUser (). GetUid (). Где auth - это ссылка на FirebaseAuth

Raj 01.09.2018 19:56

Если вы хотите удалить конкретную публикацию, вы должны указать условие, на основе которого можно удалить документ. Например: в sql db мы пишем Удалить из сотрудника, где id = 1; Аналогично, если у вас есть его uid, вы можете пройти. В противном случае сначала вы должны получить его документ, используя любое условие. Например, firestore.collection ("posts"). WhereEqualTo ("createdOn", specificDate) .get (), а затем получить этот uid документа и передать его в вызывающем методе удаления.

Raj 01.09.2018 20:01

да звучит здорово, не могли бы вы обновить свой код в своем ответе, пожалуйста.

Lukas 01.09.2018 20:08

но не идеально, я застрял с .where (...)

Lukas 01.09.2018 21:34

В чем проблема с каким состоянием?

Raj 01.09.2018 21:38

поэтому я могу удалить файлы, но все, а не один

Lukas 01.09.2018 21:49

Я уже упоминал в своем ответе, что должно быть какое-то уникальное условие, чтобы этот конкретный документ был удален. Как я использую в демонстрационных целях content. Таким образом, может быть случай, если каждое значение содержимого имеет цвет ... он удалит все документы. Попробуйте изменить значение содержимого с цвета .. на что-нибудь еще с консоли, а затем выполните. Тогда он удалит только этот документ. Итак, вы должны использовать какое-то уникальное условие в зависимости от вашей логики и использования. Здесь в демонстрационных целях я использую контент

Raj 01.09.2018 21:55

хорошо да, это сработает, но какой из них я должен взять. Я имею в виду, что я не могу взять контент или createdOn или имя пользователя, потому что этих значений используется более одного

Lukas 01.09.2018 22:03

Я думаю, что createdOn может быть уникальным полем. Временная метка Beacuse составляет до секунд. И пользователь может создать только один пост в заданную временную метку. Более того, вы можете лучше решить, что может иметь уникальное значение, исходя из того, к чему относится проект, каковы другие коллекции и как вы планируете структуру базы данных.

Raj 01.09.2018 22:15

как я могу сделать это с помощью поля createdOn в where (...)

Lukas 01.09.2018 22:33

Для этого у вас должна быть полная временная метка документа, который вы хотите удалить, а затем вы можете использовать where ('createdOn' == '30 August ..... '), то есть полную временную метку. В какое бы поле вы ни поместили условие, у вас должно быть его значение для сравнения.

Raj 01.09.2018 23:14

Лучше всего удалить документ с помощью uid, так как uid уникален для каждого сообщения. Более того, идентификатор зависит от вашей реализации, как вы удаляете сообщение. Если вы используете представление Recycler и удаляете публикацию при щелчке по ее элементу, вы можете получить каждый идентификатор документа в методе onBind. Затем вы можете легко сравнить его с существующими документами, используя условие where.

Raj 01.09.2018 23:16

@Raj, не могли бы вы предоставить функцию для новой версии swift? этот код больше не работает

Alex 13.12.2019 01:35

Из приведенного выше кода, есть ли конкретная функция, которая не работает, или не работает весь код @Alex?

Raj 13.12.2019 20:14

Полный код. Мне нужна ваша реализация для той же проблемы, но я не работаю

Alex 13.12.2019 20:15

Можно ли пообщаться с вами по той же причине?

Alex 13.12.2019 20:17

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

В коде это будет выглядеть так:

fb.postsCollection.get().then(function(querySnapshot) {
  querySnapshot.forEach(function(doc) {
    doc.ref.delete().then(function() {
      console.info("Document successfully deleted!");
    }).catch(function(error) {
      console.error("Error removing document: ", error);
    });
  })
})

это удалит все документы из коллекции сразу, но я хочу, чтобы я мог удалить один, а не все одновременно.

Lukas 01.09.2018 19:49

Этот код фактически удаляет их один за другим: каждый вызов doc.ref.delete() удаляет один документ. Если это не то, что вы хотите, можете ли вы описать свой комментарий «Я хочу удалить каждый по каждому» по-другому?

Frank van Puffelen 01.09.2018 20:08

Итак, я хочу то, что вы назвали в своем ответе выше. Но у меня это не сработало, он удаляет все документы, например, у меня было 3 документа, затем я нажимаю кнопку с функцией, и после этого все документы удаляются из коллекции сообщений.

Lukas 01.09.2018 20:13

Да, это действительно именно то, что делает этот код: каждый документ из коллекции, один за другим. Учитывая ваш вопрос («У меня есть Коллекция и внутри есть документы, которые я хочу удалить каждый по отдельности»), это то, что я думал, что вы хотели. Чего вы хотите добиться вместо этого?

Frank van Puffelen 01.09.2018 20:17

Нет, это то, что вы пишете, это то, что я хочу, но это не работает

Lukas 01.09.2018 20:19

В каждом документе есть изображение, которое вставляется на веб-страницу, и у каждого есть кнопка для удаления текущего изображения. Я нажимаю «Удалить», и все документы всей коллекции будут удалены. Но я хочу, чтобы была удалена только текущая фотография.

Lukas 01.09.2018 20:24

Это довольно много дополнительной информации, которая полностью отсутствует в вашем исходном вопросе. Пожалуйста, посмотрите как создать минимальный, полный, проверяемый пример. В этом случае, вероятно, следует включить что-то о том, как вы показываете изображение в HTML. Вам также нужно будет передать что-то из документа, который отображается в HTML, например, его идентификатор. Затем, когда пользователь нажимает на изображение, вы можете получить идентификатор из HTML и удалить документ на его основе.

Frank van Puffelen 01.09.2018 20:35

хорошо да моя ошибка извините, но я уже нашел именно то, что хочу:

Lukas 01.09.2018 20:37
alligator.io/vuejs/vue-cloud-firestore все, что я хотел сделать
Lukas 01.09.2018 20:38

Вы можете удалить документ, только если у вас есть ссылка на него. Чтобы получить это, вы должны сначала выполнить запрос, затем перебрать снимок запроса и, наконец, удалить каждый снимок документа на основе его ref.

var doucumentid = db.collection('posts').where('id','==',post.id);
doucumentid_query.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
doc.ref.delete();
});
});

Другие вопросы по теме