node.js - 如何获取集合并加入参考字段中的数据?
问题描述
我的目标是收集sales_order
并从参考字段中获取额外数据。这是一个问题,因为 1 个 sales_order 文档包含多个参考数据。
有意见的问题:如果你是我,你会尝试实现我想要做的事情,还是更多scalable
地将customer
名称等数据存储在sales_order
文档中以避免过度查询?
预期响应doc.data()
:
{
timestamp,
expectedDate,
customer_id: {name, email, street, city, zip, phone}
user_id, // similar to custoer_id
refund_policy_id, // similar to customer_id
}
的实际反应doc.data()
{
timestamp,
expectedDate,
customer_id: {_converter, _firestore, _path}
user_id, // similar to custoer_id
refund_policy_id, // similar to customer_id
}
我使用与此问题无关的云功能,这是我用来查询集合的基本代码sales_order
。
firebase
.firestore()
.collection("sales_order")
.get()
.then((querySnapshot) => {
let array = [];
querySnapshot.forEach((doc) => {
array.push(doc.data());
});
return array;
})
.catch((error) => console.error(error));
谢谢你。
解决方案
根据您共享的内容,您目前拥有以下结构:
sales_order Collection
id
customer_id
refund_policy_id
timestamp
expectedDate
Customer Collection
id
name
...
phone
使用这种结构,如果您需要 Collection 数据,则必须对每个sales_oder
文档进行 2 次读取Customer
,但是,这种方法的优点是,如果您必须更新Customer
数据,则不必每次sales_order
完成1 次额外写入Customer
以保持数据更新。
以下是一种可以一次性读取所有内容的方法,您可以将文档的副本保存在customer
文档的对象内sales_order
:
sales_order Collection
id
customer : {
CustomerId
name
...
phone
}
refund_policy_id
timestamp
expectedDate
Customer Collection
id
name
...
phone
由于 Firestore 允许您尽可能多地复制数据,这是一种可行的方法,并且您只能执行 1 次读取以实现您的直接目标,但是,您必须在每次执行时额外进行 1sales_order
次customer
写入更新customer
数据。
所以基本上它取决于你想要什么/如何获取customer
数据。就我个人而言,我会采用第一种方法,因为在更新数据的情况下易于维护customer
数据,因为如果他有很多sales_order
,它很容易失控,而且它使代码更简单。
注意:我专注于sales_order
和customer
集合,但同样适用于refund policy
.
如果您对此还有任何疑问,请告诉我。
推荐阅读
- java - 在终端会话中更改 Java 版本 (Mac OSX)
- sql-server - 在 SQL Server 2017 Management Studio 中计划作业
- javascript - 从对象数组中返回包含特定参数的随机对象
- css - 如何为打字稿中的元素设置样式?(Angular)
- python-3.x - 无法在 pandas 数据框中读取 glove.6B.300d.txt
- node.js - GCF Node10 部署失败:“加载用户代码时功能失败。错误消息:提供的代码不是可加载的模块。”
- python - 内存利用率远高于应有的水平
- java - mvn archetype:生成选择的版本
- primeng - Turbo 表分页问题(PrimeNG 7)
- javascript - 检查站点是 HTTPS 还是 HTTP?