【问题标题】:fetch data using multiple ids from firebase使用来自 firebase 的多个 id 获取数据
【发布时间】:2020-11-30 20:16:22
【问题描述】:

我正在做一个迷你电子商务项目,我有一个添加到购物车的功能, 所以基本上它是这样工作的:

我注册了一个帐户,每当我将商品添加到购物车时,我都会使用帐户用户 ID 将添加到购物车的商品的 ID 存储在用户数据中。像这样的:

/users
  /user-id-here
    ...some data
    ...a collection of ids which are the ids if the items i have bought

/products
  /product-id-1
  ...etc.

问题是,有没有办法可以使用我存储的 id 来获取我购买的产品?或者有没有更好的解决这个问题的方法?因为如果我在“产品”参考中有 15000 件商品,并且如果我获取所有商品并检查我的“购买清单”ID 是否包含每个单独商品的 ID,这是一件非常糟糕的事情......:/

【问题讨论】:

  • 你使用的是firebase数据库还是firestore?
  • 我正在使用 Firestore
  • .where() 函数对您的情况有帮助吗?
  • 您要避免的坏事是什么?如果您需要阅读 1500 份文档,那么这就是您必须要做的。没有捷径可走。
  • 就像,我有 1500 件产品,并且我保存了一些产品 ID,这是我上次将一些商品添加到购物车时保存的,我试图仅获取我添加到购物车的商品

标签: javascript reactjs firebase google-cloud-firestore


【解决方案1】:

你可以这样做:

let userProductsIds = ['id-1', 'id-2', '...'];
await db
    .collection(`products`)
    .where(firebase.firestore.FieldPath.documentId(), 'in', userProductsIds);
    .get();

您可以在 https://firebase.google.com/docs/firestore/query-data/queries#simple_queries 中阅读有关 Firestore 查询的更多信息

编辑:

这是你应该做的。

const productsCollection = db.collection('products');
userProductsId.forEach(productId => {
   let product = await productsCollection.doc(`${productId}`).get();
   console.log(product);
})

因此,您只会获取 n 次,其中 n 是您用户的商品购物车列表的大小

【讨论】:

  • 这不适用于 1500 个文档。 in 查询限制为 10 个。
  • 那么您的用户的购物车中将有 1500 件或更多商品?
  • 就像,我有 1500 件产品,并且我保存了一些产品 ID,这是我上次将一些商品添加到购物车时保存的,我试图只获取我添加到购物车的商品。大家一般是怎么处理这种情况的呢?就像你将如何实施它? :D
猜你喜欢
  • 1970-01-01
  • 2021-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多