Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.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
Json Firebase中用于聊天应用程序的一对一对话结构_Json_Swift_Firebase_Firebase Realtime Database_Nosql - Fatal编程技术网

Json Firebase中用于聊天应用程序的一对一对话结构

Json Firebase中用于聊天应用程序的一对一对话结构,json,swift,firebase,firebase-realtime-database,nosql,Json,Swift,Firebase,Firebase Realtime Database,Nosql,我正在尝试使用Firebase构建一对一对话节点,正如建议的那样,我正在尝试存储显示特定用户对话所需的屏幕所有数据: "conversations": { "XDJKljQI8JeTk6xkyMfvMqbwbQR4": { "lastMessage": "my name is john", "timestamp": 1467849600000, "users": { "XDJKljQI8JeTk6xkyMfvMqbwbQR2

我正在尝试使用Firebase构建一对一对话节点,正如建议的那样,我正在尝试存储显示特定用户对话所需的屏幕所有数据:

"conversations": {
    "XDJKljQI8JeTk6xkyMfvMqbwbQR4": {
      "lastMessage": "my name is john",
      "timestamp": 1467849600000,
      "users":
        {
      "XDJKljQI8JeTk6xkyMfvMqbwbQR2": {
        "name" : "name",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "US",
        "seen" : false
      },
     "0CcKvNkOm5fVqLSNMBcdZV8Hx1c2": {
        "name" : "Anna",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "DE",
        "seen" : true
      }   
    }},
    "XDJKljQI8JeTk6xkyMfvMqbwbQR5": {
      "lastMessage": "my name is john",
      "timestamp": 1467849600000,

      "users":{
        "XDJKljQI8JeTk6xkyMfvMqbwbQR2": {
        "name" : "Dev",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "DK",
        "seen" : false
      },
      "XDJKljQI8JeTk6xkyMfvMqbwbQR3": {
        "name" : "Chris",
      "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "US",
        "seen" : false
      }
    }

    }

  }
}
我的目标是获取给定用户的对话,并在Facebook messenger中显示一个类似的单元格(最后一条消息、时间、所见、其他用户的图像和姓名)

我的问题是:

K.FirebaseRef.conversations
    .queryOrderedByChild("users")
    .queryStartingAtValue("0CcKvNkOm5fVqLSNMBcdZV8Hx1c2")
    .queryEndingAtValue("0CcKvNkOm5fVqLSNMBcdZV8Hx1c2")
    .observeSingleEventOfType(.Value, withBlock:{ snapshot in
        print(snapshot)

        })
还尝试:

K.FirebaseRef.conversations
    .queryOrderedByChild("users")
    .queryEqualToValue("0CcKvNkOm5fVqLSNMBcdZV8Hx1c2")
    .observeSingleEventOfType(.Value, withBlock:{ snapshot in
        print(snapshot)

        })
它应该给我一个对话,其中用户的给定id部分,我做错了什么

编辑:

"conversations": {
    "user1_user2": {
      "lastMessage": "my name is john",
      "timestamp": 1467849600000,
      "users":
        {
      "user1": {
        "name" : "John",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "US",
        "seen" : false
      },
     "user2": {
        "name" : "Dev",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "DE",
        "seen" : true
      }   
    }},
    "user1_user3": {
      "lastMessage": "my name is john",
      "timestamp": 1467849600000,

      "users":{
        "user1": {
        "name" : "John",
        "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "US",
        "seen" : false
      },
      "user3": {
        "name" : "Chris",
      "profileImage" : "https://firebasestorage.googleapis.com",
        "country_code": "US",
        "seen" : false
      }
    }

    }

  }
}

不要使用“随机”房间ID,而是将房间ID基于其中的用户。请参阅@FrankvanPuffelen我已经采用了您的方法(请参阅上面的编辑),但仍然无法找到获取给定用户所有对话的方法,例如如何获取user1的所有对话?在NoSQL中,您通常根据应用程序使用数据的方式对数据进行建模(请参阅本文)。因此,如果你的应用程序需要一个用户的所有对话列表,考虑为每个用户存储所有对话的列表:代码>用户/对话/ />代码>,而不是使用“随机”房间ID,将房间ID放在用户的基础上。请参阅@FrankvanPuffelen我已经采用了您的方法(请参阅上面的编辑),但仍然无法找到获取给定用户所有对话的方法,例如如何获取user1的所有对话?在NoSQL中,您通常根据应用程序使用数据的方式对数据进行建模(请参阅本文)。因此,如果你的应用程序需要一个用户的所有对话列表,考虑为每个用户存储所有对话的列表:代码>用户/对话/ < /代码>。