2015-07-20 83 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。這需要我在取得結果時提前一步。但問題仍然沒有完全解答。 有什麼辦法可以在獲取的第二個文檔上應用過濾器嗎?我把性別定義爲「男性」或「女性」。我想在上面的加入之後得到所有男性的數量。 –