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