Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建不同类型的圆圈,如Google Plus_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 创建不同类型的圆圈,如Google Plus

Javascript 创建不同类型的圆圈,如Google Plus,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,祝大家新年快乐, 我正在使用express、angular、node和MongoDb为医生创建一个社交网络,这是这些技术中的新技术,我一直在考虑为特定用户创建不同类型的圈子,就像googleplus那样,我们有不同的圈子,比如朋友和家人,在这里,我想创建具有不同专业的医生圈,并想知道我应该如何在后端处理它 模式: var NetworkSchema = new Schema({ UserID: { type: Schema.Types.ObjectId, ref: 'User'

祝大家新年快乐, 我正在使用express、angular、node和MongoDb为医生创建一个社交网络,这是这些技术中的新技术,我一直在考虑为特定用户创建不同类型的圈子,就像googleplus那样,我们有不同的圈子,比如朋友家人,在这里,我想创建具有不同专业的医生圈,并想知道我应该如何在后端处理它

模式:

var NetworkSchema = new Schema({

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

NetworkList: [ ],
});
{

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

],

"UserID" : ObjectId("54aa46ef65c266341494a528"),
"_id" : ObjectId("54aa46ef65c266341494a529")
}
到目前为止,我一直在想的是,在网络列表数组中插入不同的对象,这些对象具有不同的专业领域的字段名,如心脏专家、心脏病专家等。在网络列表数组中,它应该是通用的,因此,我将网络列表数组-留空,可能我的逻辑不太正确,这是文件

{
"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;}});
]);
结果文档:

var NetworkSchema = new Schema({

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

NetworkList: [ ],
});
{

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

],

"UserID" : ObjectId("54aa46ef65c266341494a528"),
"_id" : ObjectId("54aa46ef65c266341494a529")
}
我知道这个逻辑与我上面描述的或者我想要的完全不同,到目前为止,我已经提供了这个逻辑,我可以在上面的文档中区分具有“\uu t”的医生类型,可能我不是在寻找代码,而是一个实现循环类型功能的逻辑。 多谢各位

编辑: 问题:-当添加相同圆类型的医生时,相同圆类型的新对象存储在数据库中,这会导致冗余

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

嗯,其中一些看起来像是我列出的答案代码,但它没有给你。也许是同一队。如果你真的玩弄“鉴别器”,你会发现当你按“模型类型”进行查询时,
\uu t
的值会“自动神奇地”为“对象类型”过滤。就像最初的人问的那样,你的方法似乎有点偏离你想要达到的最终目标。我们在同一个团队中,好像现在我正在开发用户圈模块,是的,我的方法可能有点偏离,因为每当我更新网络模型时,每次都会插入一个新的circleObj,所以可能我的整个逻辑都是错误的,我应该如何做到这一点似乎是这样的,但我试图帮助的是,这正是让这一点变得不清楚的原因。简单的术语。“NetworkList”数组中的所有内容都应该从基本对象“继承”到由“鉴别器”定义的新类型中。这就是猫鼬将如何进行类型的多态映射。如果一种类型是
医生
,则您可以通过从该模型中查询来查询“基本集合”中的那些项目,
\u v
中的“医生”将自动为您过滤。这很难解释,因为看起来你把东西放错地方了。原始答案解释得很详细。是的,我明白你的意思,但在这里,每次更新网络模型circleObj时,相同类型的circleObj都会保存到数据库中,问题是如果我添加另一个相同类型的用户/医生,那么会有另一个对象插入到circle类型的数据库中。我不知道应该使用什么查询,这样才能在单个对象中存储相同圆类型的医生的objectId。我正在编辑问题以使事情更清楚