In my app a user has friends. A user can send send requests and confirm friends (marked by the status attribute) and can delete friends. A user can only have X number of friends with X number of pending friends. To store this I have a Kind which doesn't exists , then there is a child Entity called Friends. Looks like this:
Friends
-Key((NonExistantKindParent,my_username), friends_username)
-status
-created_date
The key consists an ancestor which does exists, and the id is the user's username. The children entities will be the all the friends of that user. As a result of this each friendship will be stored twice, once for friend1 and again once for friend2. They are in entity groups so that they can be strongly consistent and I can perform transactions (for example if a user adds a friend it needs to write to both user who requested the friendship and the requestee friend). There are much more operations I need, but I am trying to understand how to do the following in which then I can apply that knowledge to other operations I need:
To get all of user's friends order by the date they were created (only username of friend is needed).
To get all of user's confirmed friends (status = 'confirmed').
Reading the docs at: https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.30.3/datastore/query?method=select I am confused how to query entitiy groups. For a couple of those queries I need to apply a property filter and an ancestor filter it looks like but am unsure how? If I needed to just query a non-entity group the docs are quite useful.