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

发布于 2025-01-20 14:13:55 字数 2390 浏览 3 评论 0原文

我的示例数据:

[
    {
        'user': '[email protected]',
        'AddressLine': 'jntgt',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'mexico',
        'AddressTitle': 'ev',
    },
    {
        'user': '[email protected]',
        'AddressLine': 'gthh',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'usa',
        'AddressTitle': 'ev',
    },
    {
        'user': '[email protected]',
        'AddressLine': 'gdgg',
        'vat': 'gfgf',
        'Companyname': 'ljjjhg',
        'countryName': 'Angola',
        'AddressTitle': 'ev',
    },
];

我希望结果如下所示:

[
    {
        'user': '[email protected]',
        'addresses': [
            {
                'AddressLine': 'jntgt',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'mexico',
                'AddressTitle': 'ev',
            },
            {
                'AddressLine': 'gthh',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'usa',
                'AddressTitle': 'ev',
            },
        ],
    },
    {
        'user': '[email protected]',
        'addresses': [
            {
                'AddressLine': 'gdgg',
                'vat': 'gfgf',
                'Companyname': 'ljjjhg',
                'countryName': 'Angola',
                'AddressTitle': 'ev',
            },
        ],
    },
]

mongodb 聚合代码应该如何?我试过这个:

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

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

My sample data:

[
    {
        'user': '[email protected]',
        'AddressLine': 'jntgt',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'mexico',
        'AddressTitle': 'ev',
    },
    {
        'user': '[email protected]',
        'AddressLine': 'gthh',
        'vat': 'gfgf',
        'Companyname': 'gfgfg',
        'countryName': 'usa',
        'AddressTitle': 'ev',
    },
    {
        'user': '[email protected]',
        'AddressLine': 'gdgg',
        'vat': 'gfgf',
        'Companyname': 'ljjjhg',
        'countryName': 'Angola',
        'AddressTitle': 'ev',
    },
];

I want the result to look like this:

[
    {
        'user': '[email protected]',
        'addresses': [
            {
                'AddressLine': 'jntgt',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'mexico',
                'AddressTitle': 'ev',
            },
            {
                'AddressLine': 'gthh',
                'vat': 'gfgf',
                'Companyname': 'gfgfg',
                'countryName': 'usa',
                'AddressTitle': 'ev',
            },
        ],
    },
    {
        'user': '[email protected]',
        'addresses': [
            {
                'AddressLine': 'gdgg',
                'vat': 'gfgf',
                'Companyname': 'ljjjhg',
                'countryName': 'Angola',
                'AddressTitle': 'ev',
            },
        ],
    },
]

How should mongodb aggregation code be? I tried this:

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

ok. but The user I grouped in root appears again. how can i remove user when i group.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我三岁 2025-01-27 14:13:55

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

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

Mongo 游乐场

You can do this in multiple ways, the easiest way IMO is to just add another $project stage at the end that excludes that field, like so:

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

Mongo Playground

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文