couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kenneth Tyler <...@8thfold.com>
Subject Re: One-sided 1-to-many relationship
Date Wed, 15 Sep 2010 21:18:37 GMT
I think this is the feature you want to use.

from the wiki:
Linked documents

*This is a new feature in couchdb 0.11*

If you emit an object value which has *{'_id': XXX}* then include_docs will
fetch the document with id XXX rather than the document which was processed
to emit the key/value pair.

This means that if one document contains the ids of other documents, it can
cause those documents to be fetched in the view too, adjacent to the same
key if required.

For example, if you have the following hierarchically-linked documents:

[
{ "_id": "11111" },
{ "_id": "22222", "ancestors": ["11111"], "value": "hello" },
{ "_id": "33333", "ancestors": ["22222","11111"], "value": "world" }
]

you can emit the values with the ancestor documents adjacent to them in the
view like this:

function(doc) {
  if (doc.value) {
    emit([doc.value, 0], null);
    if (doc.ancestors) {
      for (var i in doc.ancestors) {
        emit([doc.value, Number(i)+1], {_id: doc.ancestors[i]});
      }
    }
  }


}


more at http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views


ken tyler

On Wed, Sep 15, 2010 at 2:10 PM, 7zark7 <7zark7@gmail.com> wrote:

> Given doc type A and B:
>
> A has a 1-to-many relationship with B (each A knows of many Bs)
> Each B can be known by many As, but does not know which.
> A has an array of its known B keys.
>
> A doc:
> {
>  "_id": "...",
>  "kind": "A",
>  "b_IDs": ["...", "...", "...", "..."]
> }
>
>
> B doc:
> {
>  "_id": "...",
>  "kind": "B"
> }
>
>
> If I know the key for A, how can I retrieve all related Bs in one view or
> list call?
> I'd like to avoid middle-ware that makes sequential calls.
>
> Thanks!
>

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