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
}
]
其中 user
和 service
字段是对用户和服务集合中数据的“引用”,这些数据是数据的“真实来源”。
我目前正在处理 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
}
]
其中 user
和 service
字段是对用户和服务集合中数据的“引用”,这些数据是数据的“真实来源”。