MongoDB-删除查询中的重复项
我必须为我的工作与MongoDB合作,但我对它不是很满意。我必须收集一些文件,并根据一个字段删除重复项 下面是一个(非常非常)简化的文档结构:MongoDB-删除查询中的重复项,mongodb,mongodb-query,Mongodb,Mongodb Query,我必须为我的工作与MongoDB合作,但我对它不是很满意。我必须收集一些文件,并根据一个字段删除重复项 下面是一个(非常非常)简化的文档结构: { 'user': 'The User', 'report': { 'id' : 0 ... } } 一个用户可以有多个报告,也可以有多个相同的报告(这不是概念上的错误,只是简化的结构让它很奇怪) 报告仅与一个用户相关 我想通过删除所有重复的报告id来检索一组用户报告。以下是一个示例: # Dat
{
'user': 'The User',
'report': {
'id' : 0
...
}
}
一个用户可以有多个报告,也可以有多个相同的报告(这不是概念上的错误,只是简化的结构让它很奇怪)
报告仅与一个用户相关
我想通过删除所有重复的报告id来检索一组用户报告。以下是一个示例:
# Datas
User | Report ID
--------|----------
User1 | AAAA
User1 | AAAA
User1 | BBBB
User2 | CCCC
User3 | DDDD
User3 | DDDD
我真的对所有的聚合器感到困惑。如何实现这一点?在聚合管道中使用
$group
操作符非常简单
首先,我的示例数据:
[
{ 'user': 'User1', report: { id: 'AAAA' } },
{ 'user': 'User1', report: { id: 'BBBB' } },
{ 'user': 'User1', report: { id: 'AAAA' } },
{ 'user': 'User2', report: { id: 'CCCC' } },
{ 'user': 'User3', report: { id: 'DDDD' } },
{ 'user': 'User3', report: { id: 'DDDD' } }
]
要获得与您发布的预期格式相同的格式,您可以执行以下查询:
db.reports.aggregate([
{
$group:{
_id:“$report.id”,
用户:{
$first:“$user”
}
}
},
{
$项目:{
_id:0,
用户:“$User”,
报告:“$\u id”
}
}
])
此聚合管道中的第一步按report.id
对集合中的所有项进行分组。请注意,点表示法引用嵌入文档中的字段。它还通过选择mongo使用该报告ID找到的第一个文档上的user
字段的值来投影user
字段。您提到报告ID对于用户是唯一的,因此这不会导致任何问题
此聚合管道中的第二步只是将字段重命名为用于预期格式的名称。$group
操作符将输出的\u id
字段设置为分组依据的字段(在本例中为report.id
)。$project
命令使用该值设置报告
字段并取消设置\u id
查看此帖子是否有用:。
[
{ 'user': 'User1', report: { id: 'AAAA' } },
{ 'user': 'User1', report: { id: 'BBBB' } },
{ 'user': 'User1', report: { id: 'AAAA' } },
{ 'user': 'User2', report: { id: 'CCCC' } },
{ 'user': 'User3', report: { id: 'DDDD' } },
{ 'user': 'User3', report: { id: 'DDDD' } }
]