Firebase Security Rules: .indexOn unique ids

I have this structure:

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

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

  • Table view is not displaying the comments or username from Firebase
  • Observers hanging when using Firebase offline
  • Firebase retrieve image from URL save with Firebase database
  • Firebase Query not Executing Properly
  • How to add Firebase to Today Extension iOS
  • iOS: Firebase token returning null
  • 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, ... )
    

    Solutions Collect From Internet About “Firebase Security Rules: .indexOn unique ids”

    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.