节点js图搜索

时间:2016-09-07 12:21:17

标签: node.js database search graph

我正在使用Nodejs和MySql创建社交应用程序。 我有一个名为粉丝的表格。字段为:关注者关注

为了解释我的问题,我在关注者表中创建了一些假数据:(关注者关注

  1. Amir,Reza

  2. Amir,Meghdad

  3. Amir,Batman

  4. Amir,David

  5. Reza,Mohammad

  6. Meghdad,Mohammad

  7. 蝙蝠侠,巴斯塔尼

  8. 穆罕默德,大卫

  9. Bastani,Joseph

  10. 这是' Amir '解释我想要的: Graph:

    得到我想要的结果:(用户级别连接):

    1. Reza,0,1

    2. Meghdad,0,1

    3. 蝙蝠侠,0,1

    4. David,0,2

    5. Mohammad,1,2

    6. Bastani,1,1

    7. Joseph,2,1,

    8. 我无法使用MySql执行此操作,因此我尝试使用levelgraph数据库,并且在3之后的级别中让我感到困惑。有人可以帮助我吗?

1 个答案:

答案 0 :(得分: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 );