【问题标题】:Firestore: conditionally update map based on map valuesFirestore:根据地图值有条件地更新地图
【发布时间】:2020-06-10 01:36:08
【问题描述】:

我正在寻找有关如何构建某些 Firestore 更新的技术建议。

如何根据其中一个键/值对的 name 字段更新由键/值对组成的文档:

const farmRef = firestore.collection('farms').doc(uid)
// Something like: farmRef.mapUpdate(f => f.name === 'farm name' ? {...f, archived: true} : f)

目前,我只能通过一些客户端代码来实现这一点,我想尽可能避免。

如果我只计划每个农场文档有 0 - 10 个键/值对,则似乎没有必要创建子集合。但是,如果我这样做,查询将如下所示:

const userRef = firestore.collection('users').doc(uid)
const farmRef = userRef.collection('farms').where("name", "==", "Clive Fields")
farmRef.update({archived: true})

Firestore 是否适用于更新简单文档,而不是包含 maps 的文档?

当前设置 潜在设置

【问题讨论】:

    标签: database firebase google-cloud-firestore


    【解决方案1】:

    您可以使用字段点表示法来定位要更新的嵌套地图的属性。

    firestore
        .collection('farms')
        .doc(uid)
        .update({ "xxx.archived": true })
    

    我也会认真考虑使用子集合,因为文档的大小不是无限的 (1MB),所以它们不能无限增长。而且您根本无法查询和过滤嵌套地图中的单个项目。因此,如果您认为其中任何一个可能存在问题,请考虑进行更改。

    【讨论】:

    • 好的,谢谢。还要感谢您几年前制作的关于如何同步 firebase 和 google 表格的 github 存储库!我发现它对我去年做的一个客户项目非常有用
    猜你喜欢
    • 2022-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2021-07-20
    • 2021-01-23
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多