2016-09-07 105 views
0

我正在使用Nodejs和MySql創建社交應用程序。 我有一個名爲的關注者關注者。字段爲:追隨者正在關注。 (跟隨節點js圖搜索

  1. 阿米爾·禮薩·

  2. 阿米爾,Meghdad

  3. 對於解釋我的問題,我在關注表中創建一些假的數據

  4. 阿米爾,蝙蝠俠

  5. 阿米爾,大衛

  6. 禮,穆罕默德

  7. Meghdad,穆罕默德

  8. 蝙蝠俠,Bastani

  9. 穆罕默德,大衛

  10. Bastani,約瑟夫

這是 '阿米爾' 的網絡解釋什麼,我想: Graph:

結果,我想要什麼:(用戶級別連接):

  1. Reza,0,1

  2. Meghdad,0,1

  3. 蝙蝠俠,0,1

  4. 大衛,0,2

  5. 穆罕默德,1,2

  6. Bastani,1,1

  7. 約瑟夫,2,1

我無法用MySql做到這一點,所以我嘗試levelgraph數據庫,它是困惑我在級別 s 3之後。有人能幫助我嗎?

回答

0

最後我自己的搜索得到的作品:

let getNetwork = (user, maxLevel = 5)=>{ 
    let getLevel = (user, level)=>{ 
     return new Promise((resolve, reject)=>{ 
      let search = []; 
      for(let i = 0; i < level; i++){ 
       search.push(
        { 
         subject: db.v(i), 
         object: db.v((i+1)) 
        } 
       ); 
      } 
      search[0].filter = obj => obj.subject == user && !(level > 1 && obj.trust < 1); 
      db.search(search, (error, results)=>{ 
       resolve(Object.keys(results).map(i=> 
        Object.keys(results[i]).map(j=> 
         results[i][j] 
        ) 
       )); 
      }); 
     }); 
    } 
    return new Promise((resolve, reject)=>{ 
     let ret = []; 
     let getLevels = function (i=1){ 
      if(i > maxLevel){ 
       resolve(ret); 
      } 
      else{ 
       getLevel(user, i).then((lvlX)=>{ 
        ret = ret.concat(lvlX); 
        getLevels(i+1); 
       }); 
      } 
     } 
     getLevels(); 

    }); 
} 
getNetwork('Amir').then(console.log);