【问题标题】:Change nested sub-collections on CloudFunctions更改 CloudFunctions 上的嵌套子集合
【发布时间】:2019-09-02 15:46:20
【问题描述】:

我需要帮助。

我的项目有 2 个系列,一个名为 products,另一个名为 stores

一个产品可以属于多个商店,因此为了使应用程序更“实用”,我将所选产品信息复制到 商店 的子集合中,在本例中为 商店 > 产品

我的想法是创建一个云功能,它会监视任何产品的任何更新,然后通过更新值将这些更改反映在 stores > products 子集合中。

我已经使用相同的 ID 保存它。例如,products 集合下的 productID 1 将在 stores > products 子集合下具有相同的 id。

我的问题是,我怎样才能只查询 products 子集合?这可能吗?

【问题讨论】:

    标签: firebase google-cloud-firestore google-cloud-functions


    【解决方案1】:

    这取决于你到底想查询什么。

    如果您只想查询 ONE 给定商店文档的产品子集合中的 ONE 特定产品文档,您可以执行以下操作:

    var docRef = db.collection("stores").doc(storeId).collection("products").doc(productId)
    
    docRef.get().then(function(doc) {
        if (doc.exists) {
            console.log("Document data:", doc.data());
        } else {
            // doc.data() will be undefined in this case
            console.log("No such document!");
        }
    }).catch(function(error) {
        console.log("Error getting document:", error);
    });
    

    如果您想查询 ONE 给定商店的产品子集合(获取此子集合中的所有产品文档),您可以执行以下操作:

    db.collection("stores").doc(storeId).collection("products").get()
      .then(function(querySnapshot) {
         //....
      })
      .catch(function(error) {
         //....
      });
    

    如果要查询ALL店铺的产品子系列,可以使用Collection Group Query,如下:

    var productsCollGroup = db.collectionGroup('products');
    
    productsCollGroup.get()
    .then(function (querySnapshot) {
         //....
    })
    .catch(function(error) {
         //....
    });
    

    【讨论】:

    • 嘿,谢谢。如果我运行collectionGroup,那不会也捕获主要的 Products 集合吗?我是否会更改这些子集合的名称?
    【解决方案2】:

    您可以查看此链接 [1] 上的主题,特别是针对您的问题,您可以查看此答案 [2]。

    例如,他们提到有一个文档数组,并提供了如何在集合中搜索特定文档的答案。

    [1]Firestore query subcollections

    [2]https://stackoverflow.com/a/46585748/9054282

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 2016-02-13
      • 2021-11-04
      相关资源
      最近更新 更多