使用Mongodb模式构建预约系统

3
我们有两种不同的方法来使用mongodb实现预约系统。

第一种方法:

appointments:
    {
        resourceId: "string",
        resourceType: "doc"/"nut"...,
        userId: "string",
        userName: "string",
        startDate: "2020-05-18T16:00:00Z",
        endDate: 2020-05-18T17:00:00Z
        title: "string",
        description: "string",
        type: "string"/"off"
    },
    {
        resourceId: "string",
        resourceType: "doc"/"nut"...,
        userId: "string",
        userName: "string",
        startDate: "2020-05-21T12:00:00Z",
        endDate: 2020-05-21T12:30:00Z,
        title: "string",
        description: "string",
        type: "string"/"off"
    },
    ...

resources:
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    },
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    },
    {
        resourceId: "string",
        resourceName: "string"
        resourceType: "doc"/"nut"/"room",
        autoApprove: true/false,
        constantDaysOff: [sunnday]
    }

这里的appointmentsresources是不同的集合,每个集合中都有示例文档。

第二种方法:

resources:
    {
        resourceId: "string",
        resourceName: "string",
        resourceType: "doc"/"nut"...,
        constantDaysOff: [sunday],
        2020-05-21: [
            {
                startDate: "2020-05-21T12:00:00Z",
                endDate: 2020-05-21T12:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }, 
            {
                startDate: "2020-05-21T14:00:00Z",
                endDate: 2020-05-21T14:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }
        ],
        2020-05-22: [
            {
                startDate: "2020-05-22T12:00:00Z",
                endDate: 2020-05-22T12:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }, 
            {
                startDate: "2020-05-22T14:00:00Z",
                endDate: 2020-05-22T14:30:00Z,
                userId: "string",
                userName: "string",
                title: "string",
                description: "string",
                type: "string"/"off"
            }
        ]
        ...
    }

在这里,我们只有一个集合,而约定日期是集合中的键。每个日期键都包含多个JSON对象,表示同一天不同的约会。
注意:
没有超过1天的约会,我们有startDateendDate的原因是为了计算约会的长度、开始时间和结束时间。
我们需要以最有效的方式执行查询,例如:
- 获取特定资源ID的所有约会 - 获取资源在两个不同日期之间的约会 - 获取用户在不同日期之间的约会 - 取消/删除约会
资源可以是任何东西,例如医生、教练、房间等等。
所以我的问题是,对于mongodb查询,哪种方法更有效/可行?

第二种方法更高效且更容易处理,因为你可以通过键获取数组。我们之前也尝试构建了一个非常类似的应用,但最终放弃了。这是它的前端后端代码库。你可能会在那里找到一些有用的片段。 - Natixco
你不觉得在第二种方法中通过userId进行查询会很丑吗?@Natixco - riadrifai
我不是后端的人,但这并不那么重要。无论如何,你都需要通过日期和用户ID进行查询,或者反过来。 - Natixco
1个回答

0
  1. 大多数文章都建议不要使用开始日期和结束日期,而是使用时间(甚至不是日期格式)的开始/结束时间 - 你主要通过天/天数选择(查询),然后处理时间。

时间更加灵活,特别是当您需要在约会之间设置一些时间步长时。此外,您可以轻松地长时间编辑而不更改日期或更改日期而不更改时间。

  1. 依我之见:根据前面的观点,使用第一种变体比第二种更好。

在第二个变体中,更改日期将很困难。您需要处理整个数组,按日期更新,然后更新这些的整个集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接