Skip to content

Instantly share code, notes, and snippets.

@MrTrick
Created April 21, 2011 14:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save MrTrick/934650 to your computer and use it in GitHub Desktop.
Save MrTrick/934650 to your computer and use it in GitHub Desktop.
Two types of documents (well four, but two in this use case)
Roles:
{
"_id": "role:00000390_student_11009_2010_AUT_U_1_S_group4",
"_rev": "1-82412c94266f8be1d4374313d586860d",
"doc_type": "role",
"source": "admin",
"status": "active",
"role_type": "student",
"created_date": "2010-01-01T12:00:00+11:00",
"updated_date": "2010-01-01T12:00:00+11:00",
"user_id": "user:00000390",
"group_id": "group:11009_2010_AUT_U_1_S_group4"
}
Groups:
{
"_id": "group:11009_2010_AUT_U_1_S_group4",
"_rev": "1-0845a3bb754d167360168987f9fb31b6",
"doc_type": "group",
"group_type": "project",
"display_name": "Group 4",
"path": [
"group:D",
"group:D_T",
"group:11009",
"group:11009_2010_AUT_U_1_S",
"group:11009_2010_AUT_U_1_S_group4"
],
"source": "admin",
"status": "active",
"created_date": "2010-01-01T12:00:00+11:00",
"updated_date": "2010-01-01T12:00:00+11:00",
"locked_fields": [
"display_name",
"path",
"group_type"
]
}
In the group document, 'path' is the address of the group in the hierarchy.
"group:11009_2010_AUT_U_1_S" is a subject.
"group:11009_2010_AUT_U_1_S_group4" is a group in that subject.
For a use case, I need to load every role on the *children* of a given subject - for
every sub-subject, see which users are enrolled.
Example query:
For a group, fetch every role on its children, by child id.
Fetch for:
startkey = [
"group:D",
"group:D_T",
"group:11009",
"group:11009_2010_AUT_U_1_S",
]
endkey = [
"group:D",
"group:D_T",
"group:11009",
"group:11009_2010_AUT_U_1_S",
{}
]
Returns:
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group1"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000100"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group1"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:001101"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group1"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:003204"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group1"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000104"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group2"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000502"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group2"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000391"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group2"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000011"}
["group:D", "group:D_T", "group:11009", "group:11009_2010_AUT_U_1_S","group:11009_2010_AUT_U_1_S_group2"] =>
{role... group_id:"group:11009_2010_AUT_U_1_S_group4", user_id:"user:000107"}
.........etc etc etc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment