2016-05-31 98 views
6

我有這樣的結構:火力地堡安全規則:.indexOn唯一ID

"post": { 
    "groupMember": { 
    "-KHFHEHFWDB1213": "true", 
    "-KSJHDDJISIS011": "true", 
    "-KJSIO19229129k": "true" 
    } 
} 

我想.indexOn自動生成的唯一的ID groupMember。

我試着這樣做:

"post": { 
    ".indexOn": "groupMember" 
    ... 
} 

但我仍然收到此錯誤:

考慮加入 「.indexOn」:在 「groupMember/-KHFHEHFWDB1213」/ POST

那麼如何在唯一的ID上添加一個.indexOn?

UPDATE:

這是我(斯威夫特),使用查詢:

postRef.queryOrderedByChild("groupMember/\(uid)").queryEqualToValue(true).observeEventType(.Value, ...) 
+1

糾正我,如果我錯了某人,但我很確定它默認索引的鍵? – Chris

+0

你能提供你正在使用的查詢給你一個索引錯誤嗎? Chris是正確的,Firebase默認索引鍵,所以我的猜測是查詢本身結構不良。 –

+0

@MichaelBleigh我已更新我的帖子 – leonardloo

回答

1

要查詢給定的關鍵之一是否具有價值"true"(注意,作爲輸入數據結構是一個字符串,而不是一個布爾值 - 要注意的東西!)你會想要創建像這樣的安全規則:

{ 
    "post": { 
    "groupMember": { 
     "$memberId": {".indexOn": ".value"} 
    } 
    } 
} 

然後在/post/groupMember路徑上使用queryOrderedByValue("true")。重要的是要注意規則中的$memberId,它聲明瞭表示自動生成的id的通配符鍵,以及.value,它表示不是在子屬性上編制索引(如果您的結構有另一層嵌套),而是要在即時葉上索引節點值。

+0

感謝您的回答。但是,如果我根據'/ post/groupMember'路徑來查詢,那麼我怎樣才能獲得父信息,比如'/ post/message'上的東西? – leonardloo

+0

我覺得我很不清楚你到底在做什麼。您是否試圖通過當前用戶是否爲組成員來過濾一組帖子?如果是這樣,你應該重新構建你的數據,並可能反規範化。如果不是,你究竟想要完成什麼? –

+0

因此,在這裏的答案是否.value屬性引用回groupMember值?如果我有一個通配符$ uid代替groupMember,並且想索引它,那麼.indexOn:.value是否仍適用於此? – Silmarilos