Firebase Firestore文档关系

Firebase Firestore文档关系,firebase,nosql,google-cloud-firestore,Firebase,Nosql,Google Cloud Firestore,因此,我正在尝试构建一个简单的购物解决方案,其中我有一些产品,我想让人们购买它们并存储订单记录。因为我是NoSQL概念的新手,所以我不能完全理解这个想法。我不明白如何在不同时引入更新的情况下跟踪产品数量。我的想法是有两个系列,一个名为产品,另一个名为订单产品文档将具有初始金额值,订单将具有订单金额。所以我会从一个减去另一个,这样就能得到正确数量的产品。这里的问题是,这似乎是一个非常低效的解决方法,我的直觉告诉我有一个更好更合适的方法 应用程序的可能数据库结构可能是: Firestore-root

因此,我正在尝试构建一个简单的购物解决方案,其中我有一些产品,我想让人们购买它们并存储订单记录。因为我是NoSQL概念的新手,所以我不能完全理解这个想法。我不明白如何在不同时引入更新的情况下跟踪产品数量。我的想法是有两个系列,一个名为
产品
,另一个名为
订单
<代码>产品文档将具有初始金额值,
订单
将具有订单金额。所以我会从一个减去另一个,这样就能得到正确数量的产品。这里的问题是,这似乎是一个非常低效的解决方法,我的直觉告诉我有一个更好更合适的方法

应用程序的可能数据库结构可能是:

Firestore-root
   |
   --- products (collection)
   |     |
   |     --- productId (document)
   |           |
   |           --- quantity: 30
   |           |
   |           --- price: 100
   |           |
   |           --- //Other product properties
   |
   --- orders (collection)
         |
         --- orderId (document)
               |
               --- products: ["productId", "productId", "productId"]
               |
               --- //Other order properties
如您所见,有两种不同的集合,一种用于产品,另一种用于订单。请注意,
orderId
文档中的
products
属性是数组类型。这意味着您可以简单地添加/删除产品ID。在Android中,您可以简单地使用:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference ordersRef = rootRef.collection("orders");
DocumentReference docIdRef = ordersRef.document(orderId);
docIdRef.update("products", FieldValue.arrayUnion(productId));
docIdRef.update("products", FieldValue.arrayRemove(productId));
要删除,只需使用:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference ordersRef = rootRef.collection("orders");
DocumentReference docIdRef = ordersRef.document(orderId);
docIdRef.update("products", FieldValue.arrayUnion(productId));
docIdRef.update("products", FieldValue.arrayRemove(productId));
订单完成后,只需获取所有产品id,并使用我在以下帖子中的答案减少每个产品的数量:


你好,尼克,很抱歉看到您的问题被搁置。希望我理解你的要求。你试过我上面的解决方案了吗?