2015-07-20 85 views
2

我是couchdb的新手,我需要进行连接并从2个文档类型中获取结果。couchdb加入2个文档

我在一个文件中有type="registeredEvent"而在另一个文件中有type="user"。是两种类型的模式如下:

registeredEvent

{ 
    "_id": "316ff4844ce56...", 
    "_rev": "2-5dcfb85eaea3f....", 
    "eventid": "0620F01F-3B6B-DE07-860A-SF453FF5AELP11", 
    "email": "[email protected]", 
    "type": "registeredEvent" 
} 

用户

{ 
    "_id": "[email protected]", 
    "_rev": "1-89768208cfb5650ee....", 
    "name": "amaya", 
    "email": "[email protected]", 
    "dob": "91-07-14", 
    "gender": "Female", 
    "location": "canada", 
    "facebook": "dghdfj", 
    "twitter": "fgfghh", 
    "type": "user" 
} 

我想要得到的数据用于填充图。

  1. 我有一个eventid的列表,我想在这些事件中获得女性的数量。
  2. 我也想有没有用户的每个事件,但该年龄组17-28

在我使用以下来获取数据

db.query('event/getGraphdata1...',{keys: [<array of eventid's>], include_docs: true }) 

任何人可以帮助我出去了。我尝试了很多东西,但没有成功。我无法检查自己是否在正确的轨道上,因为所有的事情都为我提供了错误的数据。

+0

我有线索d“链接文档”但不成功:-( –

+0

我想将registeredEvent的电子邮件字段加入用户的_id。 –

回答

1

你可以得到的性别数据,年龄要求:

function(head, req) { 
     var row; var counts = {}; var male = female = age18 = 0; 
     while(row = getRow()) { 
     if(row.doc != null) { 
      if(row.doc.gender != null && row.doc.gender.toLowerCase() === 'male') 
       male++; 
      else 
       female++; 
      if(row.doc.dob != null && Array.isArray(row.doc.dob)) { 
       var age = 0; 
       var date1 = new Date(row.doc.dob[0], row.doc.dob[1], row.doc.dob[2]); 
       var date2 = new Date(); var m = date1.getMonth(); 
       var years = date2.getFullYear() - date1.getFullYear(); 
       date1.setFullYear(date1.getFullYear() + years); 
       if (date1.getMonth() != m) date1.setDate(0); 
       age = date1 > date2 ? --years : years; 

       if(age < 29) 
        age18++; 
      } 
     } 
    } 
    counts['male'] = male;counts['female'] = female; counts['age18'] = age18; send(JSON.stringify({'counts' : counts})) 
} 

如果需要,您可以扩展这种支持更多的年龄组...

1

你可以得到一个结果从这些2号文件使用下面的视图设置:

function(doc) { 
    if (doc.type === 'registeredEvent') { 
    emit(doc.eventid, {_id:"Profile_" + doc.email}, doc.user); 
    } 
} 

当使用HTTP API添加使用列表像include_docs =真

+0

感谢您的回答@wiz。这需要我在取得结果时提前一步。但问题仍然没有完全解答。 有什么办法可以在获取的第二个文档上应用过滤器吗?我把性别定义为“男性”或“女性”。我想在上面的加入之后得到所有男性的数量。 –