【问题标题】:how to maintain duplicate data between documents sync on firebase?如何在firebase上同步的文档之间维护重复数据?
【发布时间】:2019-01-03 11:11:38
【问题描述】:

我有一个关于 Firestore 和云功能的问题。

假设我有 2 个收藏: 产品和reuse_shopping_carts。

我的reuse_shopping_cart 文档包含许多具有所有属性(id、名称、价格、href)的产品。

现在我希望,如果我在 products collection 中更改特定产品的价格,云功能将在所有reuse_shopping_cart 文档上运行,并且在每个包含特定产品的文档中都会更改价格。

谁能解释我怎么做? 或者什么是正确的方法?

我知道我可以在reuse_shopping_cart 中仅存储产品ID 并在客户端获取更新的产品数据,但是对于一个reuse_shopping_cart 中包含100 个产品的列表,每次我想阅读购物清单时都需要100 个单独的查询,而改变产品价格的情况很少见,所以我认为这是一种更好的方法。

如果您有不同的想法,我会很高兴听到... 谢谢!

【问题讨论】:

  • 如果价格变化不如读取购物车常见,那么您将价格复制到购物车中将为您节省 IO 操作。事实上,我什至不确定您是否应该更新所有购物车中的价格,因为价格可能在用户将商品添加到购物车时已经确定。对于所有选项,请在此处查看我的答案:stackoverflow.com/questions/30693785/…
  • 嗨弗兰克,在正常的购物车中你是对的,但这是对用户永久保留的重复使用购物车,它是新购物车的起点,因此价格需要随着时间的推移而变化。我在firebase doc中阅读了“事务和批量写入”,但它最多只能包含500个文档......所以这是一个问题,因为一段时间后我将拥有更多的500个重用购物清单。有什么建议吗?
  • 嗯,好的。在这种情况下,这是有道理的。我的链接答案中的选项保持不变,您从 Cloud Functions 更新它们的方法对我来说听起来很有效。

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


【解决方案1】:

您可以像这样构建您的reuse_shopping_carts 文档:

products: (map)   
  (product id)
    name:
    value:

例如:

然后要查找价格变化时要更新的文档,您可以这样查询:

firebase.firestore().collection('reuse_shopping_carts').where(`products.${productId}.price`, '>=', 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-07
    • 2023-03-18
    • 2021-07-28
    • 1970-01-01
    相关资源
    最近更新 更多