【问题标题】:Firestore query with only a field inside an arrayFirestore 查询仅包含数组中的一个字段
【发布时间】:2020-12-22 13:33:37
【问题描述】:

这就是我想要完成的事情:我正在建立一个网上商店。网上商店有一个 React 前端。前端从 Firestore 中获取 5 collections 并在商店页面上显示集合数组中的所有商品。用户在商店页面上选择商品。 I send the item fields such as (price, name, quantity, id) 到我的express server 和服务器进行项目字段的结帐会话。用户转到 Stripe 结帐表单,并在付款完成后由 Stripe 发送回我的前端。我在我的服务器上监听该事件,然后何时想要更新 Firestore 中项目的数量字段。

但是我如何在 Firestore 中查询此项目?有没有办法只用这个 id 字段(或 name 字段)来查询 Firestore?一些类似的东西:

  db
      .collection('collections')
      .where('id', '===', 1)

或者我是否需要将(集合的)文档 ID 保存为项目映射中的一个字段并将其发送到 Stripe?还是有更好的方法来做到这一点?我在网上找不到任何关于此的内容。

Here is a screenshot of Firestore.

请原谅我的初学者问题。我还在学习 React、Firestore 和 Node.js。

【问题讨论】:

  • 取决于您需要传递的内容,虽然我无法与 Firestore 交谈,但一旦您拥有想要出售的物品(很可能通过 ID 映射到实际产品和创建的价格)在 Stripe 中)您还可以在创建结帐会话时将元数据作为键:值对传递。 stripe.com/docs/api/checkout/sessions/… 如果您想传递数据。例如,当结帐会话完成时,您就可以使用此元数据。
  • @v3nkman 感谢您的回复。是的,在结帐会话中使用元数据正是我的想法。但是现在如何使用提供的元数据更新 Firestore 是个问题 :)
  • 快速点:在 Firestore 中,您使用“==”,而不是“===”。 firebase.google.com/docs/reference/js/…

标签: javascript reactjs firebase google-cloud-firestore stripe-payments


【解决方案1】:

首先确保您正确使用 Firestore 术语。有collections,也有documents

您通过以下路径访问的集合:

  • collRef = db.collection("products")
  • collRef = db.collection("products").where("quanity_on_hand", ">", "0")
  • collRef = db.collection("products").doc("12345").collection("purchase_history")

后一个实例也可以通过collRef = db.collection("products/12345/purchase_history")访问。

在上述所有情况下,您都会收到CollectionReference

您访问的文档,例如:

  • docRef = db.collection("products").doc("12345")
  • docRef = db.doc("products/12345")

这将为集合“products”中 ID 为“12345”的文档返回 DocumentReference

因此,对于上面的代码示例,您希望使用 docRef = db.doc("collections/1") 来取回您所追求的项目的 DocumentReference。 (或者,您也可以使用:docRef = db.collection("collections").doc("1")

如果您坚持使用上面的代码,您会返回一个 CollectionReference,然后您需要使用 .get() 获取数据,然后提取结果文档(这将只是一个文档),然后使用它。哦...您需要在所有文档中添加一个“id”字段,因为默认情况下文档的 ID 值(文档的“名称”)不是文档的一部分,因此如果您想使用 @987654334 @,那么您需要在文档中添加一个“id”字段并正确填充它。

如果您使用docRef = db.doc("collections/1"),您将直接查询该文档,并将返回对该文档的引用。不需要额外的字段,也不需要从结果集中提取单个文档。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多