Swift 如何最大化云Firestore中现有的数字字段

Swift 如何最大化云Firestore中现有的数字字段,swift,firebase,google-cloud-firestore,Swift,Firebase,Google Cloud Firestore,我在一个文档中有几个字段,其中包含迷你游戏的用户记录。在用户播放了其中一些之后,我更新了本文档中的记录。不能允许我用较小的记录值覆盖现有记录值。因此,我需要最大化它们 我考虑过的解决办法是: 。这个解决方案对我不起作用,因为没有互联网连接它就不能工作 。我可以在更新或创建文档时触发该函数。这个解决方案对我来说是可行的,但它使我的应用程序中的逻辑复杂了很多 。如果文档的新值小于旧值,我可以阻止编写该文档。但是这个解决方案只有在一次只写一个字段的情况下才能很好地工作 理想情况下,我希望如下所示: l

我在一个文档中有几个字段,其中包含迷你游戏的用户记录。在用户播放了其中一些之后,我更新了本文档中的记录。不能允许我用较小的记录值覆盖现有记录值。因此,我需要最大化它们

我考虑过的解决办法是:

  • 。这个解决方案对我不起作用,因为没有互联网连接它就不能工作
  • 。我可以在更新或创建文档时触发该函数。这个解决方案对我来说是可行的,但它使我的应用程序中的逻辑复杂了很多
  • 。如果文档的新值小于旧值,我可以阻止编写该文档。但是这个解决方案只有在一次只写一个字段的情况下才能很好地工作
  • 理想情况下,我希望如下所示:

    let data: [String: Any] = [
        "game_id0": FieldValue.maximum(newRecord0),
        "game_id1": FieldValue.maximum(newRecord1),
        "game_id2": FieldValue.maximum(newRecord2),
    ]
    let docRef = db.collection("user_records").document(documentId)
    docRef.setData(data, merge: true)
    
    但不幸的是,
    FieldValue
    类只有方法:
    increment
    arrayUnion
    arrayRemove
    delete
    。 在对的描述中,我找到了最大和最小方法,但我怀疑这是否可以合法使用

    谁能告诉我其他可行的方法吗

    UPD:

    将以下文档存储在服务器上:

    { "game_id": 13 }
    
    用户从一台设备(离线)玩游戏,得20分

    然后,同一用户从另一台设备(在线)玩同一个游戏,得22分。将发送更新请求。服务器现在存储以下信息:

    { "game_id": 22 }
    
    在用户的第一台设备上,出现Internet并进行录制。在这种情况下,会发生覆盖,文档采用以下形式:

    { "game_id": 20 }
    
    即,覆盖先前收集的用户记录。
    但是,只有当新值大于当前值时,我才需要录制。也就是说,第二步之后的数据不应更改。

    如果您不能使用事务(这通常是正确的做法),那么您必须使用其他方法之一。我认为你别无选择。使用云功能可能会更容易,我认为这不会像你说的那样使事情复杂化。只需几行代码即可检查任何更新值是否不应小于现有值。

    您能否澄清firestore模型?用户是否共享一个文档,或者每个用户都有自己的文档和其中的多个游戏统计信息?@hugogress每个用户都有自己的文档,其中包含多个迷你游戏的记录。因此,文档包含大约20个字段。字段值是多少?增量不够吗?@hugogress我添加了一个示例。请看。我可能会将每个新条目存储在单独的文档中,并在运行时聚合它,从而在运行时生成游戏id,或者使用云函数聚合id并将其放入另一个字段。