查找后按分组

问题描述 投票:0回答:1

我必须计算系统中有多少活跃和不活跃的客户。 我可以按状态分组并拥有它。 问题是,每个客户都属于一个办公室,该办公室本身可能处于非活动状态。

因此,在了解我的客户状态之前,我只需要匹配活动办公室。 我怎样才能做到这一点?

办事处:

[
{
 _id: UUID('d0ca792b-6ab3-464c-92ec-241be5551405'),
 Name: 'Office1'
 Status: 'Active'
},
{
 _id: UUID('1e49c08b-dfdb-4b29-aa01-63f32086647d'),
 Name: 'Office2'
 Status: 'Inactive'
},
{
 _id: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3'),
 Name: 'Office3'
 Status: 'Active'
},


]

顾客:

[
  {
   _id: UUID('10734c4f-c7c9-4db0-8bc6-2077cb85c242'),
   Status: 0,
   OfficeId: UUID('d0ca792b-6ab3-464c-92ec-241be5551405')
  },
  {
   _id: UUID('557fe764-c345-4fd7-94fa-086ce9e95415'),
   Status: 0,
   OfficeId: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3')
  },
  {
   _id: UUID('b8998295-700b-451e-aff9-8c2a61ee25d3'),
   Status: 0,
   OfficeId: UUID('d0ca792b-6ab3-464c-92ec-241be5551405')
  },
  {
   _id: UUID('f90bce6d-a35d-4733-8d53-3085b15412d7'),
   Status: 1,
   OfficeId: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3')
  },
  {
   _id: UUID('3023ad50-6dde-4c1b-b695-c75a147481e1'),
   Status: 0,
   OfficeId: UUID('d0ca792b-6ab3-464c-92ec-241be5551405')
  },
  {
   _id: UUID('74c46c51-6738-4eb8-ba47-a494189db5b4'),
   Status: 1,
   OfficeId: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3')
  },
  {
   _id: UUID('447542b4-bf34-4a74-8168-c068248ae703'),
   Status: 1,
   OfficeId: UUID('1e49c08b-dfdb-4b29-aa01-63f32086647d')
  },
  {
   _id: UUID('aa461e7b-5a40-4e74-91f0-82c8df9c6106'),
   Status: 0,
   OfficeId: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3')
  },
  {
   _id: UUID('06d224f1-fc7f-4395-934b-41f53bf6439b'),
   Status: 1,
   OfficeId: UUID('1e49c08b-dfdb-4b29-aa01-63f32086647d')
  },
  {
   _id: UUID('6bf2b36d-3470-4d1a-a50e-70b693b02ea5'),
   Status: 0,
   OfficeId: UUID('d20d002f-a343-478b-9910-ceb2ee5d9fd3')
  }
]
mongodb aggregation-framework
1个回答
0
投票

主要概念是您需要将“客户”与“办公室”集合一起加入,并使用

Status: "Active"
执行过滤。

解决方案1:

db.Customers.aggregate([
  {
    "$lookup": {
      "from": "Offices",
      "localField": "OfficeId",
      "foreignField": "_id",
      "as": "office"
    }
  },
  {
    $match: {
      "office.Status": "Active"
    }
  },
  {
    $unset: "office"
  }
])

演示解决方案1 @ Mongo Playground

解决方案2:

db.Customers.aggregate([
  {
    "$lookup": {
      "from": "Offices",
      "localField": "OfficeId",
      "foreignField": "_id",
      pipeline: [
        {
          $match: {
            Status: "Active"
          }
        }
      ],
      "as": "office"
    }
  },
  {
    $match: {
      "office": {
        $ne: []
      }
    }
  },
  {
    $unset: "office"
  }
])

演示解决方案 2 @ Mongo Playground

© www.soinside.com 2019 - 2024. All rights reserved.