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



我的样本数据:

[
{
'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游乐场

最新更新