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

标签 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
            }
        }
    }

这可能吗?

如果是的话..你们能帮我吗?

最佳答案

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'
         }
    }
});

关于javascript - 如何动态创建集合名称(取决于用户信息),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27932834/

相关文章:

node.js - 验证错误: mongoose validation failed

javascript - NodeJS 电子邮件别名服务器

mongodb - Cloudera impala支持mongodb吗?

java - 我们如何在 Mongo 中使用 ClusterListener?

javascript - oidc-client 登录后重定向

javascript - 如何在 Angular 6 中捕获第三方库中的数据?

javascript - 取消屏蔽日期时间 - inputmask

javascript - 将 ExpressJS 与 nginx 一起使用时出现 502 Bad Gateway

javascript - 自动将引用从 index.html 复制到 karma.conf.js

mongodb - 无法从 Intellij Idea ultimate/DataGrip 连接到 mongo atlas