【问题标题】:firestore remove documents by field valuefirestore 按字段值删除文档
【发布时间】:2020-04-12 02:33:34
【问题描述】:

我的 Firestore 数据库中的每个文档都包含 1 个字段 {name: 'some value'}

我想遍历所有文档,然后如果文档的字段值等于我的参数,我想删除该文档

我正在尝试这样做:

removeContact: function(name){
      console.log('removing contact',name)

      db.collection("contacts").forEach(doc=>{
        if(doc.data().name === name){
          doc.delete()
        }
      })

    }

但我得到了未定义 forEach() 的错误。

【问题讨论】:

    标签: vue.js google-cloud-firestore


    【解决方案1】:

    您需要在集合或查询之后使用.get() 来获取查询快照promise,然后您会对其进行相应处理。您可以在快照上使用forEach 并删除每个文档。

    一个更好的方法是使用像where('name', '==', name) 这样的查询并以这种方式删除文档,而不是搜索每个文档并使用 if 语句。使用查询会减少您的函数要做的事情。

    【讨论】:

    • 谢谢 christopher,我错过了承诺,这让我抓到了 :)
    【解决方案2】:

    要删除文档,您需要知道该文档的完整路径。由于您不知道文档 ID,这意味着您首先需要阅读文档。

    好消息是,这意味着您还可以执行查询以仅过滤您感兴趣的文档,而不是执行客户端 if

    db.collection("contacts").where("name", "==", name)
      .get()
      .then((querySnapshot) => {
        querySnapshot.forEach(doc=>{
          doc.ref.delete()
        })
      })
    

    【讨论】:

      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 2021-07-23
      • 2020-09-11
      • 1970-01-01
      • 2020-10-31
      • 2021-12-31
      • 2019-11-25
      • 1970-01-01
      相关资源
      最近更新 更多