У меня есть Коллекция под названием postsCollection, и внутри есть документы, которые я хочу удалить каждый по отдельности.
Коллекция:
код:
delete () {
fb.postsCollection.doc().delete().then(function() {
console.info("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
}
Я не знаю, как определить doc() ...



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы удалить любой документ из коллекции, вы должны передать 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 ..'. Точно так же вы можете использовать различные другие предложения, такие как>, <,> = и т. д.
Если вы хотите удалить текущие данные пользователя, вы можете узнать его uid, вызвав auth.getCurrentUser (). GetUid (). Где auth - это ссылка на FirebaseAuth
Если вы хотите удалить конкретную публикацию, вы должны указать условие, на основе которого можно удалить документ. Например: в sql db мы пишем Удалить из сотрудника, где id = 1; Аналогично, если у вас есть его uid, вы можете пройти. В противном случае сначала вы должны получить его документ, используя любое условие. Например, firestore.collection ("posts"). WhereEqualTo ("createdOn", specificDate) .get (), а затем получить этот uid документа и передать его в вызывающем методе удаления.
да звучит здорово, не могли бы вы обновить свой код в своем ответе, пожалуйста.
но не идеально, я застрял с .where (...)
В чем проблема с каким состоянием?
поэтому я могу удалить файлы, но все, а не один
Я уже упоминал в своем ответе, что должно быть какое-то уникальное условие, чтобы этот конкретный документ был удален. Как я использую в демонстрационных целях content. Таким образом, может быть случай, если каждое значение содержимого имеет цвет ... он удалит все документы. Попробуйте изменить значение содержимого с цвета .. на что-нибудь еще с консоли, а затем выполните. Тогда он удалит только этот документ. Итак, вы должны использовать какое-то уникальное условие в зависимости от вашей логики и использования. Здесь в демонстрационных целях я использую контент
хорошо да, это сработает, но какой из них я должен взять. Я имею в виду, что я не могу взять контент или createdOn или имя пользователя, потому что этих значений используется более одного
Я думаю, что createdOn может быть уникальным полем. Временная метка Beacuse составляет до секунд. И пользователь может создать только один пост в заданную временную метку. Более того, вы можете лучше решить, что может иметь уникальное значение, исходя из того, к чему относится проект, каковы другие коллекции и как вы планируете структуру базы данных.
как я могу сделать это с помощью поля createdOn в where (...)
Для этого у вас должна быть полная временная метка документа, который вы хотите удалить, а затем вы можете использовать where ('createdOn' == '30 August ..... '), то есть полную временную метку. В какое бы поле вы ни поместили условие, у вас должно быть его значение для сравнения.
Лучше всего удалить документ с помощью uid, так как uid уникален для каждого сообщения. Более того, идентификатор зависит от вашей реализации, как вы удаляете сообщение. Если вы используете представление Recycler и удаляете публикацию при щелчке по ее элементу, вы можете получить каждый идентификатор документа в методе onBind. Затем вы можете легко сравнить его с существующими документами, используя условие where.
@Raj, не могли бы вы предоставить функцию для новой версии swift? этот код больше не работает
Из приведенного выше кода, есть ли конкретная функция, которая не работает, или не работает весь код @Alex?
Полный код. Мне нужна ваша реализация для той же проблемы, но я не работаю
Можно ли пообщаться с вами по той же причине?
Чтобы удалить документ, вам необходимо знать его идентификатор. Это означает, что, если вы не знаете идентификаторов в коллекции, вам придется сначала прочитать документы из коллекции, чтобы удалить их.
В коде это будет выглядеть так:
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);
});
})
})
это удалит все документы из коллекции сразу, но я хочу, чтобы я мог удалить один, а не все одновременно.
Этот код фактически удаляет их один за другим: каждый вызов doc.ref.delete() удаляет один документ. Если это не то, что вы хотите, можете ли вы описать свой комментарий «Я хочу удалить каждый по каждому» по-другому?
Итак, я хочу то, что вы назвали в своем ответе выше. Но у меня это не сработало, он удаляет все документы, например, у меня было 3 документа, затем я нажимаю кнопку с функцией, и после этого все документы удаляются из коллекции сообщений.
Да, это действительно именно то, что делает этот код: каждый документ из коллекции, один за другим. Учитывая ваш вопрос («У меня есть Коллекция и внутри есть документы, которые я хочу удалить каждый по отдельности»), это то, что я думал, что вы хотели. Чего вы хотите добиться вместо этого?
Нет, это то, что вы пишете, это то, что я хочу, но это не работает
В каждом документе есть изображение, которое вставляется на веб-страницу, и у каждого есть кнопка для удаления текущего изображения. Я нажимаю «Удалить», и все документы всей коллекции будут удалены. Но я хочу, чтобы была удалена только текущая фотография.
Это довольно много дополнительной информации, которая полностью отсутствует в вашем исходном вопросе. Пожалуйста, посмотрите как создать минимальный, полный, проверяемый пример. В этом случае, вероятно, следует включить что-то о том, как вы показываете изображение в HTML. Вам также нужно будет передать что-то из документа, который отображается в HTML, например, его идентификатор. Затем, когда пользователь нажимает на изображение, вы можете получить идентификатор из HTML и удалить документ на его основе.
хорошо да моя ошибка извините, но я уже нашел именно то, что хочу:
Вы можете удалить документ, только если у вас есть ссылка на него. Чтобы получить это, вы должны сначала выполнить запрос, затем перебрать снимок запроса и, наконец, удалить каждый снимок документа на основе его ref.
var doucumentid = db.collection('posts').where('id','==',post.id);
doucumentid_query.get().then(function(querySnapshot) {
querySnapshot.forEach(function(doc) {
doc.ref.delete();
});
});
а что такое doc (uid), как бы вы хотели определить uid?