node.js - Firebase Cloudfirestore 更新集合中的元素
问题描述
我正在使用带有nodejs和cloudfirestore的firebase函数来构建一个API,现在我遇到了一个问题,我有一个集合,集合中有一个对象数组。
我的目标是仅更新特定元素而不读取整个对象,然后再次推送。
这就是我的“订单收藏”的样子:
"someRestaurantId":[{id:1,desc:"test",val:3000},{id:2,desc:"test",val:4000},{id:4,desc:"test",val:5000}]
我的目标仅更新 id 2。
这是我一直在尝试的:
获取基于的完整列表
const document = db.collection('orders').doc(req.params.restId);
迭代并找到正确的元素,对其进行修改并再次更新。
await document.update(fullobject)
问题是我需要更容易处理的东西,因为该数组中可能有数千个元素。
解决方案
查看描述的问题,我认为您应该为此使用子集合(有时称为嵌套集合)。但是,从描述中很难判断您现在拥有什么。
Firestore 集合结构总是这样:
collection -> document -> fields and nestedCollections
thannestedCollection
具有相同的结构,因此您可以将整个结构嵌套多少次,但始终集合仅包含文档,并且每个文档仅包含字段和集合。
在呈现的集合中,描述数组直接在集合中或直接在文档中,这两者都是不可能的。
无论如何,我的想法是按照以下方式构建它:
- 包含各种 restID 文档的集合订单
- 每个文档(例如“someRestaurantId”)都包含名称为 ex 的子集合。“休息订单”
- 在子集合中将添加 ID 为 (1,2,3 等) 的文档
- 子集合中的每个文档都有字段
desc
,val
Collection Orders:
Document RestID_1:
Subcolection RestOrders:
Document 1: {val: 3000, desc: test}
Document 2: {val: 3000, desc: test}
...
Document RestID_2:
Subcolection RestOrders:
Document 1: {val: 3000, desc: test}
Document 2: {val: 3000, desc: test}
...
现在要更新“RestID_1”的值,您可以使用命令“id 2”:
db.collection('Orders')
.doc('RestID_1')
.collection('RestOrders')
.doc('2')
.update( {val: 4000} )
在上述解决方案中,您避免读取和更新大数组。您只能更新嵌套子集合中的一个文档的一个字段。
推荐阅读
- python - 使用超级功能时,我在这段简单的代码中遇到错误
- visual-studio - 如何更改可执行文件引用的 dll 路径?
- r - 使用 sjTools 包的 Plot_models 在绘图中显示分类变量的参考类别 OR
- r - 如何使用 data.table 有条件地用以前的值“逐行”填充列
- javascript - 创建一个大小相同但背景颜色不同的矩形
- undefined - 如何检查“expect_out(buffer)”(及相关)是否存在?
- node.js - PUT请求后Node js服务器崩溃
- google-apps-script - 如何确保“简单邮件合并”不会重复电子邮件
- laravel - 更改上传图片的目录
- python - 有没有办法找到字符串中某个单词之后的单词?