我的样本数据:
[
{
'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游乐场