更改CloudFunctions上的嵌套子集合

时间:2019-09-02 15:46:20

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

我需要一些帮助。

我的项目中有2个馆藏,一个叫做产品,另一个叫商店

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

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

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

我的问题是,如何只查询产品子集合?这可能吗?

2 个答案:

答案 0 :(得分:2)

这取决于您要查询什么。

如果要在给定商店文档的 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) {
     //....
});

答案 1 :(得分:0)

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

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

[1] Firestore query subcollections

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