MongoDB 中带有额外参数的多对多关系

Many to many relationship with extra parameters in MongoDB

我为一家 window 清洁公司建立了一个管理系统,提供多项服务。我有两个集合:客户和服务。每个客户可以有多个服务,每个服务可以属于多个客户。

据我所知,这是一个基本的多对多关系,应该是这样的

客户

{
    _id: 1,
    name: 'Customer 1',
    services: [101, 102]
}
{
    _id: 2,
    name: 'Customer 2',
    services: [101]
}

服务

{
    _id: 101,
    name: 'Service 1',
    customers: [1, 2]
}
{
    _id: 102,
    name: 'Service 2',
    customers: [1]
}

到目前为止一切顺利。我可以查询客户并获得所有服务,并且可以从服务中获得客户。

但我需要更多数据。对于每个关系,我想要一个开始日期、结束日期(可选)、频率等。

在具有关系数据库的 SQL 环境中,我建立了多对多关系 table,其中包含两个外键和用于附加数据的额外列。 MongoDB 有什么东西可以轻松处理这个问题吗?

我认为 many-to-many 关系 table 与两个外键和用于附加数据的额外列也被推荐用于 MongoDB。

查看下面我的 mongoplayground。

db.Customers.aggregate([
  {
    $match: {
      _id: 1
    }
  },
  {
    $lookup: {
      from: "Relationships",
      localField: "_id",
      foreignField: "Customer_id",
      as: "docs",
      pipeline: [
        {
          $lookup: {
            from: "Services",
            localField: "Service_id",
            foreignField: "_id",
            as: "docs",
            pipeline: []
          }
        },
        {
          $set: {
            docs: {
              $first: "$docs.name"
            }
          }
        }
      ]
    }
  }
])

mongoplayground