想要按用户对 mongoDB 个文档进行分组。但是在分组之后,我不希望用户的邮件字段再次出现在地址中。如何?

want to group mongoDB documents by user. but after grouping, I don't want the user's mail field to appear again in the addresses. how?

我的示例数据:

[
    {
        'user': 'aa@hotmail.com',
        'AddressLine': 'jntgt',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'mexico',
        'AddressTitle': 'ev',
    },
    {
        'user': 'aa@hotmail.com',
        'AddressLine': 'gthh',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'usa',
        'AddressTitle': 'ev',
    },
    {
        'user': 'bb@hotmail.com',
        'AddressLine': 'gdgg',
        'vat': 'gfgf',
        'Companyname': 'ljjjhg',
        'countryName': 'Angola',
        'AddressTitle': 'ev',
    },
];

我希望结果如下所示:

[
    {
        'user': 'aa@hotmail.com',
        'addresses': [
            {
                'AddressLine': 'jntgt',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'mexico',
                'AddressTitle': 'ev',
            },
            {
                'AddressLine': 'gthh',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'usa',
                'AddressTitle': 'ev',
            },
        ],
    },
    {
        'user': 'bb@hotmail.com',
        'addresses': [
            {
                'AddressLine': 'gdgg',
                'vat': 'gfgf',
                'Companyname': 'ljjjhg',
                'countryName': 'Angola',
                'AddressTitle': 'ev',
            },
        ],
    },
]

mongodb聚合码应该怎么写?我试过这个:

[
    {
        $group: {
            _id: '$user',
            addresses: { $push: '$$ROOT' },
        },
    },
    {
        $project: {
            user: '$_id',
            addresses: 1,
        },
    },
];

好的。但是我在 root 中分组的用户再次出现。我如何在分组时删除用户。

您可以通过多种方式执行此操作,IMO 最简单的方法是在末尾添加另一个 $project 阶段以排除该字段,如下所示:

db.collection.aggregate([
  {
    $group: {
      _id: "$user",
      addresses: {
        $push: "$$ROOT"
      }
    },
    
  },
  {
    $project: {
      user: "$_id",
      addresses: 1,
      
    }
  },
  {
    $project: {
      _id: 0,
      "addresses.user": 0
    }
  }
])

Mongo Playground