【问题标题】:Increment a field through with the set() method in batch operations in Android Firestore在 Android Firestore 的批处理操作中通过 set() 方法增加一个字段
【发布时间】:2019-08-15 10:39:16
【问题描述】:

我有一个集合,其中包含只有一个名为“likeCount”的字段的文档。当有人从我的 android 应用程序中点击“like”按钮时,我想增加它。问题是,当一个帖子第一次被点赞时,我想为那个帖子创建一个新文档。如果它已经被喜欢,一个简单的增量就足够了。 除此之外,我正在通过批处理操作执行此操作,因为我必须在执行此操作时更新另一个集合

在我相应的 iOS 应用程序中,我编写了以下代码来完成这项工作:

batch.setData(
[WallPostPublicFields.likeCount.rawValue: FieldValue.increment(1)], 
forDocument: referance(to:.wall_post_public).document(postId),
merge: true
)

任何人都可以建议一种在 kotlin 中做同样事情的方法吗?因为在 kotlin 的 batch.set() 方法中,只需要一个 doc 引用,data 和 set Options 作为参数。

我是 kotlin 和 Android 开发的新手,因此我们将不胜感激。

【问题讨论】:

    标签: android kotlin google-cloud-firestore


    【解决方案1】:

    在 Kotlin 中,只需使用以下代码行:

    val batch = db.batch()
    val postId = db.collection("posts").document().id
    val postIdRef = db.collection("posts").document(postId) 
    batch.set(postIdRef, "likeCount", 0);
    batch.update(postIdRef, "likeCount", FieldValue.increment(1))
    batch.commit().addOnCompleteListener {
        //Your logic
    }
    

    如果likeCount不存在,则会在第一次点赞时创建。

    【讨论】:

    • 嗨,Alex,非常感谢您的回答,但我想您误解了我的问题,我想在第一次喜欢时创建一个 文档。如果它只是一个新领域,这将起到作用。但是当没有文档时,update方法就不起作用了。
    • 在这种情况下,您需要先将文档的创建添加到批处理中,如我更新的答案所示。现在可以了吗?
    • 嗨,Alex,再次感谢您的帮助。直到今天我才回到这个项目。在您更新的答案中,您在调用此函数时声明 postId 对吗?在我的例子中,当点击喜欢的帖子时,我会从 UI 组件中获取 postId 作为参数。
    • "你是在调用这个函数时声明 postId 对吗?"是的,一旦调用了document() 函数,我就会得到postId。这就是您在 Firestore 中生成该唯一 ID 的方式。 “我从 UI 组件获取 postId 作为参数”这更容易,而不是生成该 ID,而是在设置 postIdRef 时使用 UI 中的 ID,就像 val postIdRef = db.collection("posts").document(postIdFromUi) 一样。
    猜你喜欢
    • 2019-11-04
    • 1970-01-01
    • 2019-05-24
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-22
    相关资源
    最近更新 更多