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

nestedCollection具有相同的结构,因此您可以根据需要嵌套整个结构多少次,但集合始终只包含文档,每个文档只包含字段和集合。

在呈现的集合中,描述数组直接在集合中或直接在文档中,这两者都是不可能的。

无论如何,我的想法是按照以下方式构建它:

  • 包含各种restID文档的集合订单
  • 每个文档(例如"someRestaurantId"(都包含名为ex的子集合;RestOrders">
  • 在子集合中,将添加ID为(1,2,3等(的文档
  • 子集合中的每个文档都有字段descval
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}
...

现在更新"0"的值;RestID_ 1";,订单;id 2";你可以使用:

db.collection('Orders')
.doc('RestID_1')
.collection('RestOrders')
.doc('2')
.update( {val: 4000} )

在上面的解决方案中,您可以避免读取和更新大数组。您只能更新嵌套子集合中一个文档的一个文件。

相关内容

  • 没有找到相关文章

最新更新