【问题标题】:How to delete data from firestore?如何从firestore中删除数据?
【发布时间】:2018-09-01 09:35:03
【问题描述】:

我有一个名为 postsCollection 的集合,里面有我想逐个删除的文档。

收藏:

代码:

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

我不知道如何定义doc()...

【问题讨论】:

    标签: javascript firebase google-cloud-firestore


    【解决方案1】:

    为了从集合中删除任何文档,您必须传递该文档的 uid。 然后调用delete()方法。

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

    您可以检查唯一字段的条件。否则它将删除所有具有 'content' equTo 'color..' 的文档。同样,您可以使用各种其他子句,例如 >、= 等。

    【讨论】:

    • 什么是doc(uid),你想如何定义uid?
    • 如果你想删除当前用户数据,那么你可以通过调用 auth.getCurrentUser().getUid() 获取它的 uid。其中 auth 是对 FirebaseAuth 的引用
    • 如果你想删除一个特定的帖子,你必须根据可以删除的文档指定一个条件。例如:在 sql db 我们写 Delete from employee where id = 1;同样,如果你有它的 uid,你可以通过。否则,首先您必须使用任何条件检索其文档。例如 firestore.collection("posts").whereEqualTo("createdOn", specificDate).get() 然后获取这个文档 uid 并在调用 delete 方法中传递它。
    • 是的,听起来不错,请您更新您的答案中的代码。
    • 但并不完美,我陷入了 .where(...)
    【解决方案2】:

    要删除文档,您需要知道其 ID。这意味着,如果您不知道集合中的 ID,则必须先读取集合中的文档才能删除它们。

    在如下代码中:

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

    【讨论】:

    • 这将一次删除集合中的所有文档,但我希望我可以同时删除一个而不是全部。
    • 这段代码实际上是一个一个地删除它们:每次调用doc.ref.delete()都会删除一个文档。如果这不是您想要的,您能否以不同的方式描述您的“我想逐个删除”评论?
    • 所以我想要你在上面的答案中所说的。但它对我不起作用,它删除了所有文档,例如我有 3 个文档,然后我单击带有该功能的按钮,之后,所有文档都将在 postsCollection 中删除。
    • 是的,这确实正是这段代码所做的:它从集合中的每个文档,一个接一个。鉴于您的问题(“我有一个集合,里面有文档,我想逐个删除它们。”)这就是我认为您想要的。你想完成什么?
    • 不,你写的是我想要的,但它不起作用
    【解决方案3】:

    您只有在拥有文档引用后才能删除该文档。为此,您必须首先执行查询,然后遍历查询快照,最后根据其引用删除每个文档快照。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-23
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多