Firebase Security Rules: .indexOn unique ids

Question!

I have this structure:

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

I want to .indexOn the auto-generated unique groupMember ids.

I tried doing this:

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

But I'm still getting this error:

Consider adding ".indexOn": "groupMember/-KHFHEHFWDB1213" at /post

So how do I add a .indexOn on a unique id?

UPDATE:

This is the query I use (in Swift):

postRef.queryOrderedByChild("groupMember/\(uid)").queryEqualToValue(true).observeEventType(.Value, ... )
By : solistice


Answers
To query whether or not one of the given keys has value "true" (note that as typed your data structure is a string, not a boolean -- something to look out for!) you'll want to create security rules like so:

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

And then use queryOrderedByValue("true") on the /post/groupMember path. Important to note is $memberId in the rules, which declares a wildcard key representing your autogenerated ids, and .value, which indicates that rather than indexing on a child property (if your structure had another layer of nesting) you want to index on the immediate leaf node value.



This video can help you solving your question :)
By: admin