MongoDB-删除查询中的重复项

MongoDB-删除查询中的重复项,mongodb,mongodb-query,Mongodb,Mongodb Query,我必须为我的工作与MongoDB合作,但我对它不是很满意。我必须收集一些文件,并根据一个字段删除重复项 下面是一个(非常非常)简化的文档结构: { 'user': 'The User', 'report': { 'id' : 0 ... } } 一个用户可以有多个报告,也可以有多个相同的报告(这不是概念上的错误,只是简化的结构让它很奇怪) 报告仅与一个用户相关 我想通过删除所有重复的报告id来检索一组用户报告。以下是一个示例: # Dat

我必须为我的工作与MongoDB合作,但我对它不是很满意。我必须收集一些文件,并根据一个字段删除重复项

下面是一个(非常非常)简化的文档结构:

{
    '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' } }
]