incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Simon Woodhead <simon.woodh...@simwood.com>
Subject Re: Conditional joins
Date Mon, 20 Sep 2010 21:04:49 GMT
Thanks for the great comments guys. I think I'll run with the two view
approach.

cheers,
Simon

On Fri, Sep 17, 2010 at 3:08 PM, Kenneth Tyler <ken@8thfold.com> wrote:

> Sorry,
> I missed an important part of your question.
> Two views would work. It might be that building a composite key would also
> work, since you have the domain information in all the user documents.
> function(doc){if(doc.type=='user'){emit([doc.domain,doc.status],doc)}
>
> and then query the view looking for [test.com,1]
>
> ken tyler
>
> On Fri, Sep 17, 2010 at 6:56 AM, Kenneth Tyler <ken@8thfold.com> wrote:
>
> > Simon,
> > I think this is a case where the flat document structure of couch
> documents
> > makes things much simpler than in SQL.
> >
> > If you had a view like this:
> > function(doc){if(doc.type=='user'){emit(doc.status,doc)}
> > then it would return all the user documents with their status as their
> key
> > and you could use ?key="1" (i think the quotes are necessary) to get all
> > the users whose status is 1
> >
> > if you want to do the same thing for domains, you just write a "domain"
> > view that returns status as the key
> >
> > ken tyler
> >
> >
> > On Fri, Sep 17, 2010 at 6:04 AM, Simon Woodhead <
> > simon.woodhead@simwood.com> wrote:
> >
> >> Hi folks,
> >>
> >> I'm pretty green with views and have a need to do a join with results
> >> from one side returned if a condition is met on the other. In SQL I'd
> >> do:
> >>
> >> select * from child join parent on child.id=parent.id where
> >> parent.status=1;
> >>
> >> I've read the 'join' documentation (e.g.
> >> http://www.cmlenz.net/archives/2007/10/couchdb-joins) and can return
> >> documents of multiple types with matching keys ok. What I can't do is
> >> do the same but only if the parent matches a condition.
> >>
> >> Specifically, my data is like:
> >>
> >>
> >>
> {"45a6951b34a6f45bd44fd169c0003f9c","_rev":"1-6c88818b43d562c45e452bf00db06ee2","type":"domain","domain":"
> >> test.com","status":1},
> >>
> >>
> {"_id":"45a6951b34a6f45bd44fd169c00046db","_rev":"1-37eaf0c4944dac9f5fe07b25c0b68b1d","type":"domain","domain":"
> >> test2.com","status":0},
> >>
> >>
> {"_id":"45a6951b34a6f45bd44fd169c00053d9","_rev":"3-729f46c86ee4984941939c65787126fb","type":"user","domain":"
> >> test.com","user":"foo","password":"test123"},
> >>
> >>
> {"_id":"45a6951b34a6f45bd44fd169c00060c8","_rev":"1-46997eba12e7adbb6e9266a1fe83c42d","type":"user","domain":"
> >> test2.com","user":"bar","password":"test123"}
> >>
> >> I want to be be able to query a view by domain and see all users for
> >> it if the status is 1. So in this case I'd see users for test.com but
> >> not for test2.com.
> >> Any help would be appreciated.
> >>
> >> Thanks!
> >> Simon
> >> --
> >> ***** Email confidentiality notice *****
> >>
> >> This message is private and confidential. If you have received this
> >> message in error, please notify us and remove it from your system.
> >>
> >>
> >> Simwood eSMS Limited is a limited company registered in England and
> Wales.
> >> Registered number: 03379831. Registered office: c/o HW Chartered
> >> Accountants, Keepers Lane, The Wergs, Wolverhampton, WV6 8UA. Trading
> >> address: Falcon Drive, Cardiff Bay, Cardiff, CF10 4RU.
> >>
> >>
> >>
> >
>

--
***** Email confidentiality notice *****

This message is private and confidential. If you have received this message in error, please
notify us and remove it from your system.


Simwood eSMS Limited is a limited company registered in England and Wales. Registered number:
03379831. Registered office: c/o HW Chartered Accountants, Keepers Lane, The Wergs, Wolverhampton,
WV6 8UA. Trading address: Falcon Drive, Cardiff Bay, Cardiff, CF10 4RU.


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message