couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Paul Davis <paul.joseph.da...@gmail.com>
Subject Re: View collation question
Date Fri, 29 Mar 2013 18:34:19 GMT
On Fri, Mar 29, 2013 at 1:32 PM, svilen <az@svilendobrev.com> wrote:
> do these live in same table/database?
>
> then it's possible in a view to have both user's-docs and
> user's-group-docs, and fetch for key=user will give u the user and
> all his groups.
> something like (pseudocode)
>
>  if doc.type=="user": emit( doc.id, doc)
>  if doc.type=="group":
>         for u in doc.users: emit( u, doc)
>

Depending on data sizes here you may just want to emit null and use
the include_docs=true query string argument but other than that this
is exactly what I was about to suggest.

> querying this with key=userid will yield the user-doc and the
> group-docs for that user.
>
> depends on what u really need, u can make something similar..
>
> see
> http://wiki.apache.org/couchdb/EntityRelationship
>
> if these live in separate databases, then would be 2 queries - one for
> user, one for groups for that userid.
>
> ciao
> svilen
>
> On Fri, 29 Mar 2013 10:56:02 -0700
> Troy Martin <troy@scriptedmotion.com> wrote:
>
>> I'm currently associating user documents with group documents like
>> this:
>>
>> {
>>    "_id": "544f4718732b51506d9de60a4e000505",
>>    "_rev": "137-f99f9a4aa5e3a4d48b76d98200b1f4fa",
>>    "username": "spencer",
>>    "firstName": "Spencer",
>>    "lastName": "jones",
>>    "emailAddress": "none@none.com",
>>    "roles": [
>>        "user"
>>    ],
>>    "type": "user",
>>    "disabled": false,
>>    "empId": "10"
>> },
>>
>> {
>>    "_id": "3979684300c58a4c90c7c6e0d6035260",
>>    "_rev": "58-0df6c24716cd1768f668399a96059692",
>>    "type": "group",
>>    "name": "marina",
>>    "description": "",
>>    "users": [
>>        "544f4718732b51506d9de60a4e000505",
>>        "63de6351a30879ee091b248c930a9254",
>>        "8f87c698f119044890c5e788cd000c18",
>>        "4b95a2e0ec42cb6d49efac7f52000e2c",
>>        "8f87c698f119044890c5e788cd0019d7"
>>    ]
>> }
>>
>>
>> When I want to edit a user my app fetches the user document and a
>> list of all the groups in the system. It then loops through the
>> groups and pulls out the ones the user is associated with by looping
>> through the users array looking for the users _id number. That's a
>> lot of looping…8-) I have to have a list of groups anyway so the user
>> can select from them, but I'm wondering if I can use view collation
>> to fetch the user and their associated groups in one request to
>> increase efficiency? I've looked at some examples on view collation,
>> but the ones I've seen show a one to one relationship between
>> documents. Not sure if I can use it with my data structured this way.
>> I've considered a joining document like a joining table from sql, but
>> thought I'd see if there was a way to make this work as is.
>>
>> Thanks,
>>
>> Troy
>>
>>
>>

Mime
View raw message