该文档不存在,它不会出现在查询或快照中吗?云防火墙
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
()?以上是关于该文档不存在,它不会出现在查询或快照中吗?云防火墙的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用Web Deploy将元素插入到web.config中吗?
在 Swift 中使用 AVAudioEngine 点击麦克风输入
如果它对 xsd 无效,你能阻止节点插入到 XmlDocument 中吗?