On 11/22/2013 9:18 AM, John Norris wrote:
Hi Jens,
thanks for this - makes sense.
To continue on this path, so if I have separate document types, where
docTypeA has a reference to docTypeB, can I have a view that returns a
docTypeA based on a value within docTypeB object? My feeling from the
docs I have seen is "no".
Also, my view returns a list of key, values. And I can use the eg key
parameter to return a particular key, value. I can also use the keys
parameter to return more than one particular key. But can I return a
document based on more than one field.
What I mean is if a document type is defined as
{
id: xxxx,
fname: fred,
lname: smith,
dob: 01/01/2001
}
The view can emit a key of "doc.fname, doc.lname" but can I search on
"fred" and "smith"? I could combine the two and search on "fredsmith"
I guess.
You can define separate "lastname" and "firstname" views, and queries
would look like
http://yourcouch/yourdb/_design/q/_view/firstname?key="fred"
or
http://yourcouch/yourdb/_design/q/_view/latname?key="smith"
If you are not sure if the first name is "fred" or "frederick", you can
get them all with a query like
http://yourcouch/yourdb/_design/q/_view/firstname?startkey="fred"&endkey="fredz"
You could also define a view (say 'name') that looks like
function(doc) {
if(doc.fname) {
emit(doc.fname, doc._id);
emit(doc.lname, doc._id);
emit(doc.fname+' '+doc.lname, doc._id);
emit(doc.lname+', '+doc.fname, doc._id);
}
}
and then you could search on first name, last name, or full name into
the same view.
But, moving away from a name, it was two towns, then they could be any
order eg "london-leeds" or "leeds-london". Again, the could be
combined but can a doc be emitted twice eg emit called twice?
Yes; see the above example.
Sorry this is all a bit confused, and the examples are not great but
hopefully the general question is getting over.
Regards,
John