Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android Firestore的批处理操作中,通过set()方法递增字段_Android_Kotlin_Google Cloud Firestore - Fatal编程技术网

在Android Firestore的批处理操作中,通过set()方法递增字段

在Android Firestore的批处理操作中,通过set()方法递增字段,android,kotlin,google-cloud-firestore,Android,Kotlin,Google Cloud Firestore,我有一个集合,其中保存的文档只有一个名为“likeCount”的字段。我想在有人点击我的android应用程序中的like按钮时增加这个值。问题是,当一篇文章第一次受到欢迎时,我想为该文章创建一个新文档。如果人们已经喜欢它,一个简单的增量就足够了。 除此之外,我还通过批处理操作执行此操作,因为在执行此操作时,我必须更新另一个集合 在我相应的iOS应用程序中,我编写了以下代码来完成此操作: batch.setData( [WallPostPublicFields.likeCount.rawValu

我有一个集合,其中保存的文档只有一个名为“likeCount”的字段。我想在有人点击我的android应用程序中的like按钮时增加这个值。问题是,当一篇文章第一次受到欢迎时,我想为该文章创建一个新文档。如果人们已经喜欢它,一个简单的增量就足够了。 除此之外,我还通过批处理操作执行此操作,因为在执行此操作时,我必须更新另一个集合

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

batch.setData(
[WallPostPublicFields.likeCount.rawValue: FieldValue.increment(1)], 
forDocument: referance(to:.wall_post_public).document(postId),
merge: true
)
在科特林,有人能提出同样的建议吗?因为在kotlin的batch.set()方法中,只接受文档引用、数据和集合选项作为参数


我不熟悉kotlin和Android开发,因此非常感谢您的帮助。

在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
不存在,将在第一个like处创建它。

在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
不存在,它将在第一时间创建。like。

嘿,Alex,非常感谢你的回答,但我想你误解了我的问题,我想在第一次喜欢它时创建一个文档。如果这只是一个新领域,这就可以了。但是当没有文档时,更新方法不起作用。在这个tcase中,您需要首先将文档的创建添加到批处理中,如我更新的答案中所示。现在还好吗?嗨,亚历克斯,再次非常感谢你的帮助。直到今天我才回到这个项目。在更新后的答案中,您是在调用此函数时声明postId的,对吗?在我的例子中,单击post like时,我从UI组件中获取postId作为参数。“调用此函数时是否声明postId?”是的,调用
document()
函数后,我将获取
postId
。这就是在Firestore中生成唯一id的方式。“我从UI组件获取postId作为参数”这更容易,而不是生成该id,当您设置
postIdRef
val postIdRef=db.collection(“posts”).document(postIdFromUi)
时,使用UI中的id。嘿,Alex,非常感谢您的回答,但我想您误解了我的问题,我想在第一次喜欢文档时创建它。如果这只是一个新领域,这就可以了。但是当没有文档时,更新方法不起作用。在这个tcase中,您需要首先将文档的创建添加到批处理中,如我更新的答案中所示。现在还好吗?嗨,亚历克斯,再次非常感谢你的帮助。直到今天我才回到这个项目。在更新后的答案中,您是在调用此函数时声明postId的,对吗?在我的例子中,单击post like时,我从UI组件中获取postId作为参数。“调用此函数时是否声明postId?”是的,调用
document()
函数后,我将获取
postId
。这就是在Firestore中生成唯一id的方式。“我从UI组件获取postId作为参数”这更容易,当您设置
postIdRef
时,使用UI中的id,而不是生成该id,例如
val postIdRef=db.collection(“posts”).document(postIdFromUi)