在mongodb中提取用户的二度人脉
moevis
最近要用mongodb来取出用户的二度人脉,刚开始写了一个版本。
当然,最终还是要修改的,不过这个版本可以发上来。
先说简要的数据结构。
user:
{
_id: ObjectId,
follows: [{ObjectId}]
}
二度人脉就是提取某个user其follow的user的follow的集合(有点绕口)
首先是先获取单个user的follow列表,我命名为friends
,然后执行
var o = {};
o.query = {_id: {$in : friends}};
o.map = function() {
var u = this;
this.follows.forEach(function(person) {
emit(person.user_id, {via: u._id, count: 1});
});
};
o.reduce = function(key, value) {
var vias = [];
value.forEach(function(user) {
vias.push(user.via);
});
return {
via: vias,
count: vias.length
};
};
User.mapReduce(o, function(err, model) {
callback(err, model);
});
这样,user的二度人脉就得到了,并且返回对象包括中间人vias。
这是用mongose的写法,mongodb基本相同,可以试试。
@icymorn, 2015.04.0