如何动态创建集合名称(取决于用户信息)

时间:2015-01-13 22:41:25

标签: javascript node.js mongodb mongoose

我想创建一个更深入的集合..数据更加整齐。

我知道如何访问数据,如何检索信息,但我不知道如何创建模式。

这是我的实际架构:

var MySchema = new Schema ({
    event: { 
            full: String,
            date: String,
            name: String,
    },
    person: {
            name: String,
            phone: String,
            email: String,
            obs: String
    }
});

我希望改变:

var BookingSchema = new Schema ({
   monday: {
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    },
   friday: {
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    },
   saturday: {
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    }
   sunday: {
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    }
});

这不是很干,所以我想知道我是否可以动态更改周的名称。如果我能,怎么办?

如果可以,真正的架构将是:

   dinamicallyDay: {
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    }

这是我的第一个问题,现在是我的第二个问题。

如果第一个问题是可能的,我怎样才能在dinamicallyDay内创建入口?

例如,有人想要注册到星期一,但是这一天已经存在于我的数据库中,我想把这个寄存器放在里面,像这样:

   monday: {
        1: {
            event: { 
                    full: String,
                    date: String,
                    name: String,
            },
            person: {
                    name: String,
                    phone: String,
                    email: String,
                    obs: String
            }
        }
    }

这可能吗?

如果是这样..你们可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

Schema构造函数接受一个对象,因此没有理由不能动态构建它。

var mySchema = {}

['mon', 'fri', 'satur', 'sun'].forEach(function(day) {
    mySchema[ day + 'day' ] = [{
        event: { 
                full: String,
                date: String,
                name: String,
        },
        person: {
                name: String,
                phone: String,
                email: String,
                obs: String
        }
    }];
});

var BookingSchema = new Schema(mySchema);

请注意,我已将其更改为数组,因此现在您可以将更多事件推送到同一天,例如

db.update({'Search here'}, {
 $push : {
    friday :  {
         event: { 
                    full: 'value',
                    date: 'value',
                    name: 'value'
         },
         person: {
                    name : 'value',
                    phone: 'value',
                    email: 'value',
                    obs  : 'value'
         }
    }
});