创build不同types的圈子,如GooglePlus

祝大家新年快乐,我正在为使用express,angular,node和MongoDb的医生创build一个社交networking,这些技术相当新颖,我一直在考虑为特定用户创build不同types的圈子 ,就像googleplus那里有不同的圈子像朋友家人 ,在这里我想创build不同专业的医生圈子,并想知道我应该如何处理它在后端

架构:

var NetworkSchema = new Schema({ UserID: { type: Schema.Types.ObjectId, ref: 'User' NetworkList: [ ], }); 

到目前为止,我一直在想的是在NetworkList数组中插入具有不同专业领域名称的不同对象,它应该是通用的,所以,我离开了NetworkList数组 – 空的 ,可能是我不太正确逻辑,这里是文件

 { "NetworkList" : [ HeartSpecialist: [ //ObjectId's of HeartSpecialist ], CardioLogists: [//ObjectId's of CardioLogists ] .. ], "UserID" : ObjectId("54aa46ef65c266341494a528"), "_id" : ObjectId("54aa46ef65c266341494a529") } 

当我使用鉴别器的架构types如:

 var portalSchema = new Schema(), CircleType = new Schema({ ID: { type: Schema.Types.ObjectId, ref: 'User' } }); CIRCLE = Portal.discriminator('CIRCLE', CircleType); function logger(label,content) { console.log( '%s:\n%s\n', label, util.inspect( content, false, 8, false ) ); } async.waterfall([ function(callback){ var circleObj = new CIRCLE({'ID': req.body.Fid}); circleObj.save(function(err,circleObj) { logger('Circles', circleObj); callback(err,circleObj); }); }, function(circleObj,callback){ var get = {'UserID':req.body.UserID}; var up = {$push:{'NetworkList':circleObj}}; Network.update(get,up,{upsert:true},function(err,user){ if (err) { console.log(err); return err;}}); ]); 

结果文件:

 { "NetworkList" : [ { "__v" : 0, "ID" : ObjectId("54a6de049754e5940c97435a"), "__t" : "CIRCLE", "_id" : ObjectId("54aa48ccba36d7ac1810e832") }, ], "UserID" : ObjectId("54aa46ef65c266341494a528"), "_id" : ObjectId("54aa46ef65c266341494a529") } 

我知道这个逻辑是完全不同的,我上面描述的或我想要的,到目前为止,我已经与这个在哪里我可以区分与types的医生有'__t'在上面的文件,可能是我不是在寻找代码,而是一个逻辑实现圈子types的function。 谢谢

编辑:问题: – 当一个相同的圆形types的医生被添加时,一个新的同types的对象被存储在数据库中,导致冗余

 { "NetworkList" : [ { "__v" : 0, "ID" : ObjectId("54aa46ef65c266341494a528"), "__t" : "CIRCLE", //two different objects of same circle "_id" : ObjectId("54aa4a40bf50c41c14e389c4") }, "54aa46ef65c266341494a528", { "__v" : 0, "ID" : ObjectId("54a6de049754e5940c97435a"), "__t" : "CIRCLE", "_id" : ObjectId("54aa4add024eebd81fe009a2") }, ], "UserID" : ObjectId("54a8291f8ed9a2b41eb164ff"), "__v" : 0, "_id" : ObjectId("54a8291f8ed9a2b41eb16500") }