Hi Sebastian,
Thank you for your response. For the below documents I would like only get
documents with the ids 7, 8 and 9, because chr.no = 5 and chr.no = 6
(?key=[5,6]) only contains chr.letter between them which are not the same
and do not have X.

Threfore I thought the judge function would be useful, but maybe in CouchDB
is there a better way to do it.

    {
      "total_rows":5,
      "offset":0,
      "rows":[
        {
          "_id":"10",
          "_rev":"3-5288068d2c4ef3e6a9d3f8ff4e3377dd",
          "chr":[
            {
              "letter":"T",
              "no":4
            },
            {
              "letter":"A",
              "no":5
            },
            {
              "letter":"X",
              "no":6
            }
          ]
        },
        {
          "_id":"14",
          "_rev":"3-21300d06c31224416b8ff71b71b304d8",
          "chr":[
            {
              "letter":"T",
              "no":4
            },
            {
              "letter":"G",
              "no":5
            },
            {
              "letter":"G",
              "no":6
            }
          ]
        },
        {
          "_id":"7",
          "_rev":"2-1516ba547bdd21724158bc854f39f66b",
          "chr":[
            {
              "letter":"C",
              "no":5
            },
            {
              "letter":"T",
              "no":6
            }
          ]
        },
        {
          "_id":"8",
          "_rev":"2-750078ccc9e74616f33a2537e41b8414",
          "chr":[
            {
              "letter":"C",
              "no":5
            },
            {
              "letter":"T",
              "no":6
            }
          ]
        },
        {
          "_id":"9",
          "_rev":"2-3d68352a2d98c56fd322ae674fb7c38a",
          "chr":[
            {
              "letter":"A",
              "no":5
            },
            {
              "letter":"G",
              "no":6
            }
          ]
        }
      ]
    }

Best wishes,

Mic

>
>
On Tue, Jan 6, 2015 at 4:41 AM, Sebastian Rothbucher <
[email protected]> wrote:

> Hi Mic,
>
> the general misconception here seems to be that "this" within map refers to
> the design doc, i.e. you'd have to have "chr" w/in the design doc - which
> is not the case in the example you have given.
> I think it would help to explain what you want to achieve with "judge" in
> the first place...
>
> Regards
>      Sebastian
>
> On Thu, Jan 1, 2015 at 6:06 AM, Mic <[email protected]> wrote:
>
> > Hi Sinan,
> > Thank you for the links and your suggestions. However, I did not quite
> > understand your suggestions and I tried this map function which did not
> > work:
> >
> >     function(doc) {
> >         var judge = function (no1, no2) {
> >             var unexpect = "X";
> >             var letter1 = unexpect, letter2 = unexpect;
> >             for (var i in this.chr) {
> >                 var chr = this.chr[i];
> >                 if (chr.no == no1) {
> >                     letter1 = chr.letter;
> >                 } else if (chr.no == no2) {
> >                     letter2 = chr.letter;
> >                 }
> >             }
> >             if (letter1 != letter2 && letter1 != unexpect && letter2 !=
> > unexpect) {
> >                 return true;
> >             }
> >             return false;
> >         };
> >
> >
> >       emit(judge(n1, n2), doc);
> >     }
> >
> > Could you please explain your ideas a little more?
> >
> > Thank you in advance.
> >
> > Mic
> >
> > On Wed, Dec 31, 2014 at 10:57 PM, Sinan Gabel <[email protected]>
> > wrote:
> >
> > > Hi!
> > >
> > > You may want to take a look at the basics here:
> > > http://docs.couchdb.org/en/latest/couchapp/views/index.html and
> Cloudant
> > > has some interactive samples at:
> > > https://cloudant.com/for-developers/all_docs/
> > >
> > > *Using map*: You may want to emit the letters and use keys to find the
> > > docs.
> > >
> > > *Not using map*: Name each doc something "smart", and use keys to find
> > the
> > > docs.
> > >
> > > Br,
> > > Sinan
> > >
> > > On 31 December 2014 at 13:05, Mic <[email protected]> wrote:
> > >
> > > > Hi,
> > > > I tried to create a map function which should use the following
> > > conditions:
> > > >
> > > >  - e.g. chr.no = 5 and chr.no = 6
> > > >  - chr.letter between two objects/dicts in chr are not the same and
> no
> > X
> > > >
> > > > I have the following function but I do not know how to combine it
> with
> > > > `emit`
> > > >
> > > >     var judge = function (no1, no2) {
> > > >         var unexpect = "X";
> > > >         var letter1 = unexpect, letter2 = unexpect;
> > > >         for (var i in this.chr) {
> > > >             var chr = this.chr[i];
> > > >             if (chr.no == no1) {
> > > >                 letter1 = chr.letter;
> > > >             } else if (chr.no == no2) {
> > > >                 letter2 = chr.letter;
> > > >             }
> > > >         }
> > > >         if (letter1 != letter2 && letter1 != unexpect && letter2 !=
> > > > unexpect) {
> > > >             return true;
> > > >         }
> > > >         return false;
> > > >     };
> > > >
> > > >
> > > > CouchDB has the below content:
> > > >
> > > >
> > > >     {
> > > >       "total_rows":5,
> > > >       "offset":0,
> > > >       "rows":[
> > > >         {
> > > >           "_id":"10",
> > > >           "_rev":"3-5288068d2c4ef3e6a9d3f8ff4e3377dd",
> > > >           "chr":[
> > > >             {
> > > >               "letter":"T",
> > > >               "no":4
> > > >             },
> > > >             {
> > > >               "letter":"A",
> > > >               "no":5
> > > >             },
> > > >             {
> > > >               "letter":"X",
> > > >               "no":6
> > > >             }
> > > >           ]
> > > >         },
> > > >         {
> > > >           "_id":"14",
> > > >           "_rev":"3-21300d06c31224416b8ff71b71b304d8",
> > > >           "chr":[
> > > >             {
> > > >               "letter":"T",
> > > >               "no":4
> > > >             },
> > > >             {
> > > >               "letter":"G",
> > > >               "no":5
> > > >             },
> > > >             {
> > > >               "letter":"G",
> > > >               "no":6
> > > >             }
> > > >           ]
> > > >         },
> > > >         {
> > > >           "_id":"7",
> > > >           "_rev":"2-1516ba547bdd21724158bc854f39f66b",
> > > >           "chr":[
> > > >             {
> > > >               "letter":"C",
> > > >               "no":5
> > > >             },
> > > >             {
> > > >               "letter":"T",
> > > >               "no":6
> > > >             }
> > > >           ]
> > > >         },
> > > >         {
> > > >           "_id":"8",
> > > >           "_rev":"2-750078ccc9e74616f33a2537e41b8414",
> > > >           "chr":[
> > > >             {
> > > >               "letter":"C",
> > > >               "no":5
> > > >             },
> > > >             {
> > > >               "letter":"T",
> > > >               "no":6
> > > >             }
> > > >           ]
> > > >         },
> > > >         {
> > > >           "_id":"9",
> > > >           "_rev":"2-3d68352a2d98c56fd322ae674fb7c38a",
> > > >           "chr":[
> > > >             {
> > > >               "letter":"A",
> > > >               "no":5
> > > >             },
> > > >             {
> > > >               "letter":"G",
> > > >               "no":6
> > > >             }
> > > >           ]
> > > >         }
> > > >       ]
> > > >     }
> > > >
> > > > How is it possible to write a map function combine with the above
> > `judge`
> > > > function or maybe there is better way to do it?
> > > >
> > > > P.S. I also asked the same question here (
> > > >
> > > >
> > >
> >
> http://stackoverflow.com/questions/27688196/map-function-with-a-helper-function-in-couchdb
> > > >  )
> > > >
> > > > Thank you in advance.
> > > >
> > > > Mic
> > > >
> > >
> >
>

Reply via email to