2017-07-30 10 views
0

ソート結果与えていないのインデックス:以下のルールでFirebase - .VALUE私はそうのようなデータ構造を有する

{ 
    "inbox_events": { 
     "from_users": { 
     "uid1": { 
      "uid2": 1501337181, 
      "uid3": 1501337183, 
      "uid4": 1501337179 
     }, 
     "uid2" : { 
      "uid6": 1501337284, 
      "uid1": 1501337295 
     } 
     } 
    } 
} 

{ 
    "rules": { 
     ".read": "auth != null", 
     ".write": "auth != null", 
     "inbox_events": { 
     "from_users": { 
      "$userId": { 
       ".indexOn": ".value" 
      } 
     } 
     } 
    } 
} 

問題:私はなぜ理解していないに値の索引付けは機能しません。 firebaseコンソールでは、各$userIdのエントリはアルファベット順に並べられています。私がqueryOrderedByValueを実行した場合、ソートされた結果は得られません。

Firebaseのドキュメントを誤読しましたか?

ありがとうございます!


EDIT:

は、具体的には、私はそうのようなデータを照会しようとしています:

let queryRef = Database.database().reference().child("inbox_events").child("from_users").child("uid1").queryOrderedByValue() 
queryRef.observe(.value, with: { (snapshot) in 
    print("key: \(snapshot.key), value: \(snapshot.value)") 
}) 

値を降順で、ソートされたリストを取得するためには、時uiduid1ノード。

+1

ポストいくつかのコードを維持するためにスナップショットを反復するためにどのようにして変換されたスナップショットを使用してコードだ、と。また、どのプラットフォームを使用するかを指定します(Android、iOS、Web、Admin SDK、REST APIなど) –

+0

@DimaRostopira:私の意図したことを追加しました。プラットフォームはiOSです。Frank Van P.によって正当に編集されました。 – Herakleis

+0

少し不明ですあなたがしようとしていること。値で照会したいが、uidがキーである。また、Firebaseは注文のための降順オプションを提供していませんが、それを行う方法はあります。最後に、.indexはアイテムのソート方法に直接影響しません。クエリのパフォーマンスが向上します。あなたは、期待されるアウトプットがどんなものかを明確にすることができますか – Jay

答えて

1

これは簡単に見逃すことができます。

結果は1つのスナップショットにまとめられ、印刷されると、そのデータは順序が失われた辞書に変換されます。

正しい順序を維持するには、返されたスナップショットを反復処理します。

は、ここでオーダー

let queryRef = self.ref.child("inbox_events").child("from_users").child("uid1").queryOrderedByValue() 
queryRef.observe(.value, with: { (snapshot) in 

    //converts to dict 
    print("key: \(snapshot.key), value: \(snapshot.value)") 

    //keeps the order 
    for child in snapshot.children { 
     let snap = child as! DataSnapshot 
     print("key: \(snap.key), value: \(snap.value)") 
    } 
}) 
+0

イエスの辞書...もちろんです。本当にありがとう ! – Herakleis

関連する問題