创建Google Plus等不同类型的圈子

时间:2015-01-06 13:16:17

标签: javascript node.js mongodb express mongoose

祝大家新年快乐, 我正在为医生创建一个使用快速,角度,节点和MongoDb的社交网络,这些技术相当新,我一直在考虑为特定用户创建不同类型的,就像 googleplus < / strong>我们有不同的圈子,如朋友家庭,在这里,我想创建具有不同专业的医生圈子,并想知道我应该如何在后端处理它

架构:

var NetworkSchema = new Schema({

UserID: {
    type: Schema.Types.ObjectId,
    ref: 'User'

NetworkList: [ ],
});

到目前为止,我一直在想的是在 NetworkList 数组中插入不同的专业字段名称的对象,如heartSpecialist,Cardiologists等,它应该是通用的所以,我离开了NetworkList数组 - ,可能我对这个逻辑不太正确,这里是文档

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

"_id" : ObjectId("54aa46ef65c266341494a529")
}

当我使用鉴别器作为模式类型时:

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")
}

我知道这个逻辑完全不同于我上面描述或我想要的东西,到目前为止我已经来到这里,我可以区分类型医生&#39; __ t&#39; 在上面的文档中,可能是我不是在寻找代码而是在实现循环类型功能的逻辑。 谢谢

修改 问题: - 当添加相同圆圈类型的医生时,相同圆圈类型的新对象将存储在数据库中,从而导致冗余

{
"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")
}

0 个答案:

没有答案