2017-04-12 32 views
2

我有這樣的直接消息之後的火力點數據結構聊天:由孩子返回結果火力地堡順序沒有孩子

{ 
    "dms" : { 
    "meta" : { 
     "1-2" : { 
     "lastMessage" : "Inadvertently", 
     "lastMessageFrom" : 5, 
     "lastMessageKey" : "-KhUHUqK9WfUJcjs2fQ-", 
     "timestamp" : 1491952336485, 
     "users" : { 
      "uid-1" : { 
      "lastMessageRead" : { 
       "key" : "-KhStVBVIfRGepiWt6cn" 
      } 
      }, 
      "uid-2" : { 
      "lastMessageRead" : { 
       "key" : "-KhSrksAgg_2TqmcLjsz" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

如果用戶ID爲1,我只想要檢索的節點,其中users.uid-1存在。在斯威夫特,我認爲這看起來像:

FIRDatabase.database().reference().child("dms").child("meta").queryOrdered(byChild: "users/uid-3").observe(.value, with: { (snapshot) in 
      if let snapshots = snapshot.children.allObjects as? [FIRDataSnapshot] { 
... 

但正在恢復每dms節點。例如,我正在查詢上面的uid-3,但它會返回我提供的數據結構示例中的節點。我究竟做錯了什麼?

+0

您是否嘗試向觀察者添加一個更多的子級別? '''... child(「users」)。queryOrdered(byChild:「uid-3」)。observe ......''' – Prientus

+0

@Prientus不會給我結果中的用戶節點嗎?我需要以'1-2'開頭的節點作爲關鍵字,以便獲得'lastMessage ...'元數據。此外,「用戶」不是「元」的孩子,所以我不知道如何工作。 – Tony

回答

0

我最終改變我的結構是:

{ 
    "meta" : { 
    "1-2" : { 
     "lastMessage" : "Dude....", 
     "lastMessageFrom" : 2, 
     "lastMessageKey" : "-KhXpXDn7et6mgFJRkWb", 
     "timestamp" : 1492011852859, 
     "users" : { 
     "uid-1" : true, 
     "uid-2" : true 
     }, 
     "users-meta" : { 
     "uid-2" : { 
      "lastMessageRead" : { 
      "key" : "-KhXpXDn7et6mgFJRkWb" 
      } 
     } 
     } 
    } 
    } 
} 

而且我的查詢,要求孩子值相等,則爲true。我猜在他們的文檔中,當他們解釋空值是如何排序的時候,它們是空的還是缺失的?

相關問題