Hi,

I think something like:

function(doc) {
  if(!doc.isa || !doc.color || !doc.nemesis) return;
  for (type in doc.isa) {
    emit([doc.isa[type], doc.color], doc.nemesis);
  }
}

that would emit something like:

{"total_rows":3,"offset":0,"rows":[
{"id":"448b2670dda335dcab5ee3952900068e","key": ["bird","Yellow"],"value":"Sylvester"}, {"id":"448b2670dda335dcab5ee3952900068e","key": ["pet","Yellow"],"value":"Sylvester"}, {"id":"448b2670dda335dcab5ee3952900068e","key": ["target","Yellow"],"value":"Sylvester"}
]}
You could then find the nemeses of yellow pets by querying with

http://localhost:5984/demo/_design/demo/_view/target? key=["pet","Yellow"]

{"total_rows":3,"offset":1,"rows":[
{"id":"448b2670dda335dcab5ee3952900068e","key": ["pet","Yellow"],"value":"Sylvester"}
]}
or for targets that are Yellow with

http://localhost:5984/demo/_design/demo/_view/target? key=["pet","Yellow"]

If you want to find pet birds who are targets you'd need a different view (and possibly Lucene or multiview, depending on how free your list of tags are).
Cheers
Simon

On 15 Oct 2010, at 08:10, Terry Brownell wrote:

Thanks Paul,

Here's another question.
Let's say i expand the "isa" property to contain an array...

{
  "_id": "tweety",
   "isa": ["bird", "pet", "target"],
  "_rev": "3-d085e60568133d80a96cd735c6c306f6",
  "color": "Yellow",
  "nemesis": "Sylvester"
}

And say all my docs have various "isa" (or tags) values.. does this mean I need to put the values in specific order and know this order in advance to
find them? ie:
http://127.0.0.1:5984/dbname/_design/ddocid/_view/view_name? key=["bird",
"pet" "target"]


Terry

On Thu, Oct 14, 2010 at 4:19 PM, Paul Davis <[email protected] >wrote:

Terry,

// map.js
function(doc) {
  if(!doc.isa || !doc.color || !doc.nemesis) return;
  emit([doc.isa, doc.color], doc.nemesis);
}

// Query URL
http://127.0.0.1:5984/dbname/_design/ddocid/_view/view_name? key=["bird",
"yellow"]

HTH,
Paul Davis

On Thu, Oct 14, 2010 at 7:07 PM, Terry Brownell <[email protected] >
wrote:
Hi, attempting to port my semantic network DB to CouchDB, but I'm not grokking the more complicated views, and in particular passing variables.

Looking for a cookbook recipe for creating a view (against the documents
below), that...

- Selects all documents where "isa" = "bird", that has a "nemesis", and
color is a variable ie: all yellow?


{
 "_id": "tweety",
  "isa": "bird",
 "_rev": "3-d085e60568133d80a96cd735c6c306f6",
 "color": "Yellow",
 "nemesis": "Sylvester"
}

{
 "_id": "Sweetie Pie",
  "isa": "bird",
 "_rev": "3-d085e60568133d80a96cd735c6c306f6",
 "color": "Yellow"
}

{
 "_id": "Woody",
  "isa": "bird",
 "_rev": "3-d085e60568133d80a96cd735c6c306f6",
 "color": "Blue",
"nemesis": "Buzz Buzzard"

}

Thanks



Reply via email to