【问题标题】:Listen to realtime updates of a document inside an array in an object with Firestore (react)使用 Firestore (react) 监听对象中数组内文档的实时更新
【发布时间】:2022-01-12 15:30:11
【问题描述】:

提前感谢您的宝贵时间。

我正在尝试收听在一些嵌套级别之后深入内部的文档的实时更新。

这是可能的还是我应该听整个第一级文档的变化并在客户端进行过滤?

这是我的数据库结构的样子:

articles: { 
      'article-one': {
          author: "jane doe",
          status: "stock",
          similar: [
             {articleId: "article20", type: "sold"},
             {articleId: "article21", type: "stock"},
             ...
         ]
      }
   }

我正在尝试收听 SIMILAR 数组中“article20”的“articleId”的文章的实时更新。

这是我正在尝试的:

const myQuery = query(collection(db, "articles", article-one, "similar"), where("articleId", "==", "article20"));

const unsub = onSnapshot(myQuery, (querySnapshot) => {   
               const selectedArticles = []
                querySnapshot.forEach((doc) => {
                    selectedArticles.push(doc.data())
                })   
                console.log(selectedArticles);  //output: []  
            })

【问题讨论】:

  • similar 是文档中的数组还是子集合?该查询正在'similar' 子集合中查找文档。
  • 'Similar' 是一个数组。谢谢

标签: javascript reactjs firebase google-cloud-firestore


【解决方案1】:

如果您尝试从数组中查询元素,那么目前这是不可能的。您必须执行以下任一操作:

  1. 获取文章的文档并使用Javascript过滤数组字段,如下所示:
const myQuery = doc(db, "articles", article-one);

const unsub = onSnapshot(myQuery, (docSnapshot) => {  
  const similar = docSnapshot.data().similar 
  const selectedArticles = similar.filter(a => a.articleId === "article20")
  console.log(selectedArticles);  
})
  1. 创建“相似”子集合,然后使用现有查询。然后应该返回给定articleId的所有类似文章的文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-08
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 2018-11-01
    相关资源
    最近更新 更多