Android 确保文件不存在';t形浮雕

Android 确保文件不存在';t形浮雕,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我正在Firestore中为Android应用程序实现一对一聊天。我将所有聊天数据存储在一个单独的集合中。此集合中的文档如下所示: { participant1: "kd94992nnd9", participant2: "49di9niso3s", p1Name: "...", p2Name: "...", messages: [/*messages are stored her*/], //Some metadata about the cha

我正在Firestore中为Android应用程序实现一对一聊天。我将所有聊天数据存储在一个单独的集合中。此集合中的文档如下所示:

{
    participant1: "kd94992nnd9",
    participant2: "49di9niso3s",
    p1Name: "...",
    p2Name: "...",
    messages: [/*messages are stored her*/],
    //Some metadata about the chats
}
    DatabaseService.getDbInstance().collection("conversations")
        .whereEqualTo("participant1", currentUser.uid)
        .whereEqualTo("participant2", targetUser.uid)
        .get()
在我的应用程序中,用户可以按下按钮,直接开始与其他用户聊天。当用户按下此按钮时,我将在此集合中创建一个新文档,其中包含用户和所有消息的
userid

为了防止重复,我希望确保任何2个用户都只存在一个文档,无论是谁开始聊天。通过使用两名参与者的
用户ID
,我如何检查他们的消息中是否已经存在文档?我尝试使用如下查询:

{
    participant1: "kd94992nnd9",
    participant2: "49di9niso3s",
    p1Name: "...",
    p2Name: "...",
    messages: [/*messages are stored her*/],
    //Some metadata about the chats
}
    DatabaseService.getDbInstance().collection("conversations")
        .whereEqualTo("participant1", currentUser.uid)
        .whereEqualTo("participant2", targetUser.uid)
        .get()
这种方法的问题在于,它创建了第二个文档,其中
participant1
participant2
的值被切换。请帮忙

这种方法的问题在于它创建了第二个文档,其中
participant1
participant2
的值被切换

在这种情况下,你应该先检查一下。因此,在创建
参与者1
参与者2
之间的另一个对话之前,请检查
参与者2
参与者1
之间的对话是否已经存在。如果存在,则在该对话中添加消息,否则创建新消息


如果您还对另一种方法感兴趣,您可以在这里找到一个关于如何创建一个完整且功能强大的应用程序的教程。您可以对照您的数据库模式检查该数据库模式。口是心非的问题解决了。

你是说我应该把
的顺序改成
吗?不,你只需要检查是否存在相反的情况。如果
.whereEqualTo(“participant2”,currentUser.uid).whereEqualTo(“participant1,targetUser.uid”)
存在,请将消息添加到现有对话中,否则创建它。您好,我发现它现在正在为两个参与者创建两个具有相同值的文档。你知道怎么做吗?如果没有看到你的代码,我帮不了你什么忙。因此,请详细说明一个新问题,并添加所有需要的代码,以便我们可以查看它。