MongoDB 数据模型 - 一个文档可以 link 到具有不同状态的多个文档

MongoDB Data Model - One document can link to multiple documents with different status

我目前正在处理 mongodb 的数据结构问题。我有两个集合:服务和用户。每个用户的服务将处于不同的状态,管理员可以为每个用户更改服务的状态。

服务集合:

[

    {

         _id: ObjectID(...),
         name: ...,
         status: [
             {
                 userId: ObjectID(...),
                 status: 0
             },
             {
                 userId: ObjectID(...),
                 status: 1
             },
             {
                 userId: ObjectID(...),
                 status: 4
             }
         ]
    }
]

用户合集:

[

    {
         _id: ObjectID(...),
         name: ...,
         email: ...,
         phone: ....
    }
]

这种结构适用于少量数据。但是,让我们想象一下,我们有 10,000 个用户和 1000 个服务,每个服务都必须包含所有用户及其状态。我相信这不是很好。因此,我正在寻找一些简洁而漂亮的解决方案。感谢阅读。

好像得有个用户服务状态的概念,可以存到专门的集合里。它会有一个用户 ID、一个服务 ID 和一个状态。在这种情况下,状态可以独立于用户或服务进行管理,并且解决方案的可扩展性会更高。该集合看起来像:

[
  {
    _id: ObjectId(...),
    userId: ObjectId(...),
    serviceId: ObjectId(...)
    status: 1
  }
]

如果您在查询服务时需要更多数据,您可以考虑将该数据嵌入到服务状态对象内的用户或服务对象中(基本上是 de-normalization 和冗余),但这需要一些努力将该数据 in-sync 与其他集合一起保存:

[
  {
    _id: ObjectId(...),
    user: {
      _id: ObjectId(...),
      name: ...
    },
    service: {
      _id: ObjectId(...),
      name: ...
    }
    status: 1
  }
]

其中 userservice 字段是对用户和服务集合中数据的“引用”,这些数据是数据的“真实来源”。