【问题标题】:Firebase Cloud Firestore query not finding my documentFirebase Cloud Firestore 查询未找到我的文档
【发布时间】:2023-03-17 03:10:01
【问题描述】:

这是我的数据图片:

我正在尝试获取该文档。这有效:

var docRef = db.collection('users').doc('jPDKwHyrFNXNTFI5qgOY');
docRef.get().then(function(doc) {
  if (doc.exists) {
    console.log("Document data:", doc.data());
  } else {
    console.log("No such document!");
  }
}).catch(function(error) {
  console.log("Error getting document:", error);
});

返回:

也就是说,如果我知道文档的密钥,我就可以获得文档。

这不起作用:

db.collection('users').where('uid', '==', 'bcmrZDO0X5N6kB38MqhUJZ11OzA3')
.get().then(function(querySnapshot) {
  if (querySnapshot.exists) {
    console.log(querySnapshot.data);
  } else {
    console.log("No such document!");
  }
})
.catch(function(error) {
  console.log("Error getting document: ", error);
});

它只返回No such document! 我的查询出了什么问题?

【问题讨论】:

  • 请使用用于代码的语言进行标记。这是 JavaScript。

标签: javascript firebase google-cloud-firestore


【解决方案1】:

您的两个请求的区别在于,在第一种情况下,您正在检索一个文档,该文档为您提供 DocumentSnapshot,该文档具有 exists 属性和 data() 方法。

在第二种情况下,您执行一个查询,它会为您提供一个 QuerySnapshot,它的处理方式必须与 DocumentSnapshot 不同。您获得的不是单个文档,而是文档列表/集合。您可以使用emptysize 属性检查是否已检索到数据,然后使用forEach 方法或docs 数组查看结果:

db.collection('users').where('uid', '==', 'bcmrZDO0X5N6kB38MqhUJZ11OzA3')
.get().then(function(querySnapshot) {
  if (querySnapshot.size > 0) {
    // Contents of first document
    console.log(querySnapshot.docs[0].data());
  } else {
    console.log("No such document!");
  }
})
.catch(function(error) {
  console.log("Error getting document: ", error);
});

【讨论】:

  • 谢谢,但它仍然无法正常工作。使用您的代码,我收到以下错误消息:“NOT_FOUND,此文档不存在。在调用 doc.data() 之前检查 doc.exists 以确保文档存在。”我尝试添加“console.log(querySnapshot.exists);”并返回“未定义”。听起来我的查询很糟糕。有什么想法吗?
  • 如果您查看我链接到的QuerySnapshot 文档,您会发现它没有exists 属性,因此它始终是未定义的。我整理了一篇简短的文章,可能会澄清一些事情:medium.com/@scarygami/…
  • 行得通!我赞成你的 Medium 文章,非常清楚。
【解决方案2】:

我的项目遇到了同样的问题。首先,您的数据库中必须有一个与 .where('objectid',==, 'object.id') 匹配的对象,然后才能让您的数据循环。像 querysnapshot.docs.forEach((d) => d.data());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-11
    • 2019-09-03
    • 2018-07-06
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 2021-08-12
    • 1970-01-01
    相关资源
    最近更新 更多