该文档不存在,它不会出现在查询或快照中吗?云防火墙

Posted

技术标签:

【中文标题】该文档不存在,它不会出现在查询或快照中吗?云防火墙【英文标题】:This document does not exist, it will not appear in queries or snapshots? Cloud Firestore 【发布时间】:2018-03-30 23:32:17 【问题描述】:

我对 Cloud Firestore 还是很陌生(不是吗?),我已经使用 Node.js 中的管理 SDK 向我的数据库添加了一些数据。它显示在控制台上,但在文档下显示“此文档不存在,它不会出现在查询或快照中。”我不确定这是为什么?截图如下:

【问题讨论】:

【参考方案1】:

根据@rithvik-ravikumar 的建议,使用 Firestore 批处理(Swift 版本):

首先我们在/users/:id/issues 下创建新文档并更新/users/:id 上的属性updatedAt 以使其“可查询”。

func saveInBatch() 

   let db = Firestore.firestore()
   
   var issueReportData: [String: Any] = [:] // Some data you want to store.
   
   let batch = db.batch()
   let userDocRef = db.collection("users").document("_firebase_user_id_goes_here_")
   let issueDocRef = userDocRef.collection("issues").document() // This will be a new document.

   // This is needed in order to make document "queryable".
   batch.setData(["updatedAt": FieldValue.serverTimestamp()], forDocument: userDocRef)
   batch.setData(issueReportData, forDocument: issueDocRef)

   batch.commit()  err in
       if let err = err 
           print("Error writing batch \(err)")
        else 
           print("Batch write succeeded.")
       
   

现在我们可以在/users 路径获取文档。

func fetchUsers() 
   let db = Firestore.firestore()
   db.collection("users").getDocuments()  (querySnapshot, err) in
      if let err = err 
         print("Error getting documents: \(err)")
       else 
         debugPrint("Found \(querySnapshot!.documents.count) documents")
         for document in querySnapshot!.documents 
            let data = document.data()
            print("\(document.documentID) => \(data)")
         
      
   

【讨论】:

【参考方案2】:

我想这就是你们都在寻找的答案: 当您创建如下文档时:

let ref = Firestore.firestore().collection("users").document().collection("data")

您没有使用自动生成的 ID 为该文档创建实际位置。 而是像这样添加一个空字段:

let tempRef = Firestore.firestore().collection("users").addDocument(data: ["dummy":"text"])
let id = ref.documentId
let ref = Firestore.firestore.collection("users").document(id).collection("data")

我试过了,现在可以正常工作了。

【讨论】:

【参考方案3】:

要认识到的关键是,仅仅因为您在root_collection > root_doc > sub_collection > sub_doc 创建了一个文档,并不意味着实际上在root_collection > root_doc 有一个文档。

所以为了向您显示... > Events > 10-12-2017 > Phase Data 下的文档,控制台显示10-12-2017 就好像它是一个文档,但它让您知道该位置实际上没有文档。所以如果你查询... > Events下的文档,10-12-2017就不会出现。

【讨论】:

感谢您的回答!我决定回到实时数据库(是的,我放弃了),但我认为你是正确的! @MichaelLehenbauer 有什么办法可以避免创建虚拟文档并实际上在运行创建root_collection > root_doc > sub_collection > sub_doc的代码时动态创建root_doc @MichaelLehenbauer 我也很想知道 Jaywaa 问题的答案 我不认为控制台允许您使用单个 UI 操作一次创建 2 个文档...但是可以通过 SDK 对“父”文档和“子”文档同时创建它们。它们仍然是独立的,可以单独删除,等等。 谁能回答@Jaywaa 的问题?有没有办法在两者之间创建非虚拟文档,类似于 Unix 的 mkdirs()?

以上是关于该文档不存在,它不会出现在查询或快照中吗?云防火墙的主要内容,如果未能解决你的问题,请参考以下文章

查询分析器远程连接:sql server 不存在或拒绝访问

我可以使用Web Deploy将元素插入到web.config中吗?

在 Swift 中使用 AVAudioEngine 点击麦克风输入

如果它对 xsd 无效,你能阻止节点插入到 XmlDocument 中吗?

Firestore - 对文档使用更新方法,但使用对象(Java)

redis中的key设置了过期时间了还会在持久化到文件中吗