incubator-couchdb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simeon F. Willbanks" <sim...@simeons.net>
Subject Re: Query view with multiple keys with OR logic
Date Sat, 19 Feb 2011 19:54:04 GMT
Correct. In retrospect, I am looking for an idiom or preferred way to
achieve a dynamic view. My example states I'd like to query by
type="post" OR tag="tag1", but I'd like the key values to be dynamic.
My next request might be type="photo" OR tag="tag2". This would return
IDs 1, 2 and 3.

I understand temporary views are an option, but they aren't efficient.
Would it be best to have two permanent views which can be queried by
key and merge the results in the client? I could have one permanent
view by_type and another by_tag. This technique looks to be described
in the blog post below, but its from 2009.

http://sitr.us/2009/06/30/database-queries-the-couchdb-way.html

Thanks,
Simeon

On Sat, Feb 19, 2011 at 9:49 AM, Robert Newson <robert.newson@gmail.com> wrote:
> While this;
>
> function(doc) {
>  if (doc.type=="post") {
>    emit(null, null);
>  }
>  for (var i=0; i<doc.tags.length; i++) {
>    if (doc.tags[i] == "tag1") {
>      emit(null, null);
>    }
>  }
> }
>
> achieves your stated goal, I don't think it's what you're really
> asking for, right?
>
> B.
>
> On 19 February 2011 16:17, Simeon F. Willbanks <simeon@simeons.net> wrote:
>> Hello,
>>
>> I'm trying to fetch a set of documents with OR logic. For example,
>> fetch all documents with type="post" OR tag="tag1". Here are a few
>> example documents with rev omitted for brevity:
>>
>> {
>>    "_id": 1,
>>    "type": "post",
>>    "tags": [
>>        "tag1",
>>        "tag2"
>>    ]
>> }
>>
>> {
>>    "_id": 2,
>>    "type": "photo",
>>    "tags": [
>>        "tag1",
>>        "tag3"
>>    ]
>> }
>>
>> {
>>    "_id": 3,
>>    "type": "photo",
>>    "tags": [
>>        "tag4",
>>        "tag5"
>>    ]
>> }
>>
>> I'd like to fetch documents with the ids 1 and 2.
>>
>> It seems this method will be my starting point:
>> "A JSON structure of {"keys": ["key1", "key2", ...]} can be posted to
>> any user defined view or _all_docs to retrieve just the view rows
>> matching that set of keys. Rows are returned in the order of the keys
>> specified. Combining this feature with include_docs=true results in
>> the so-called multi-document-fetch feature."
>> http://wiki.apache.org/couchdb/HTTP_view_API
>>
>> Am I correct so far? If yes, how would I define my map function? Would
>> I call emit multiple times and possibly use a group=true parameter?
>>
>> Thanks,
>> Simeon
>>
>

Mime
View raw message