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