【问题标题】:increment map field if map exist in firestore如果 map 存在于 firestore 中,则递增 map 字段
【发布时间】:2023-02-13 22:47:34
【问题描述】:

我正在尝试将用户每周跟踪保存在串行地图中。从 1 到 7 的数字代表天数。在日图内,我保存时间戳,里面有计数器。

例如,我想要实现的是今天是第 1 天,我的时间戳是 1658739600000,我想增加计数。但是如果天是 1 并且时间戳不同那么我想用新的时间戳更改时间戳并从 0 开始计数。我可以用这个逻辑实现这个吗?如果时间戳相同或不同,我不想从用户端读取和检查数据。

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    您可以将 atomic increment 操作与 . 语法组合为 update nested fields

    确切的语法取决于你的语言(请始终指定前进),但在 JavaScript 中它会是这样的:

    docRef.update(
        "serial.1.1658739600000", FieldValue.increment(1)
    );
    

    如果您想 delete a field,请传递 FieldValue.delete() 作为其新值。您可以在对 update() 方法的一次调用中组合这两个指令。

    【讨论】:

    • 感谢您的回答,但这只是添加了新的地图字段。如果同一天存在,我想用旧时间戳替换它。
    • 如果 serial.1.1658739600000 字段已经存在,则上面的值将其值增加 1。如果它不存在,上面的值将创建值为 1 的字段。这不是你正在发生的事情,还是不是你想要的 (在这种情况下,我可能不理解您的用例)。
    • 我正在用 flutter 编码。比方说 serial.1.1658739600000.counter = 10,我想在同一天使用不同的时间戳,我想删除 serial.1.1658739600000.counter = 10,它必须替换为 serial.1.newTimestamp.counter = 1。但是用你的代码旧的时间戳保持不变
    • 你是问如何删除字段?那将通过传递 FieldValue.delete() 作为它的新值。我在我的回答中添加了一段。
    • 我想更新一个没有点符号但带有 FieldValue.increment(1) 的嵌套字段
    【解决方案2】:

    希望您找到了解决方案。我仍然需要答案(或任何人都需要),这里有一些可以提供帮助的东西。

    String oldKey = 'serial.'+'index'+'.'+oldTimeStamp+'.count';
    String newKey= 'serial.'+'index'+'.'+newTimeStamp+'.count';
    
    docRef.update(
        oldKey , FieldValue.delete()
    );
    docRef.update(
       newKey, FieldValue.increment(1)
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-18
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 2022-11-19
      • 2017-02-13
      相关资源
      最近更新 更多