使用 Firebase 高效查询 1:1 个私人房间

Querying 1:1 private rooms efficiently with Firebase

我正在使用 Firebase 并尝试建立 1:1 对话。对于房间,我使用了这样的结构:

- rooms
   - "user1_user2"  // roomName
      - timestampedId1
        - message: "hello"
        - sender: "user2"
      - timestampedId2
        - message: "hey"
        - sender: "user1"

   - "user2_user3"
      - timestampedId3
        - message: "Mew"
        - sender: "user3"

对于房间名称,我使用了(我从这个 得到的):

let roomName = (from<to ? from+"_"+to : to+"_"+from)

但是,现在我正在尝试检索,但我感到困惑。使用 Firebase,创建和检索私人房间的正确结构是什么?

我应该在 'roomName' 节点中单独存储 'from' 和 'to' 吗?但如果是这样,那么我如何比较它们并将它们列为降序时间戳(从新到旧)?我认为应该有一种方法可以通过一个请求来完成。但是我该如何使用这种 'roomName' 方法呢?或者有没有其他更好的方法来实现它?

let roomRef = Firebase(url: self.url + "/rooms")

// some query?
              .observeEventOfType(.Value, withBlock: { details in

  })

处理这种情况的正确方法是什么?我应该完全改变结构还是有办法正确查询它?

我会按如下方式构建它并具有三个节点:roommembers、chat 和 lastmessages:

roommembers
  user1iduser2id
    user1id: true
    user2id: true

chat
  user1iduser2id
    -KIyPwdDfAA6GxMlwLJB  
      message
      userid
      etc
 (-KIyPwdDfAA6GxMlwLJB  is a childByAutoId() which is also your timestamp)

lastmessages
     user1id
         user1iduser2id
            lastmessage
            lastuser
            etc.
     user2id
         user1iduser2id
            lastmessage
            lastuser
            etc.