如何查找重复的文档和过滤元素



我有一个结构如下的集合:

{
"_id" : ObjectId("44b378cb66b323427311d3da"),
"person" : "person1",
"course" : "courseA",
},
{
"_id" : ObjectId("44b378cb66b323427311d3db"),
"person" : "person1",
"course" : "courseA",
},
{
"_id" : ObjectId("44b378cb66b323427311d3dc"),
"person" : "person1",
"course" : "courseB",
},
{
"_id" : ObjectId("44b378cb66b323427311d3dd"),
"person" : "person1",
"course" : "courseC",
}

我需要找到"个人"的重复条目。字段,但是我需要使用"课程"来过滤这些值。价值。

这是返回所有重复字段的代码,我试图在match子句中添加一个新值以通过"课程"但是它没有工作,没有返回值。

db.getCollection('students').aggregate([
{ $group: {
_id: { person: "$person"},
uniqueIds: { $addToSet: "$_id" },
count: { $sum: 1 } 
}}, 
{ $match: {
count: { $gte: 2 },
}},
{ $sort : { count : -1} }
]);

我只需要复制有course: "courseA"person:"Person1"

您只是在group阶段收集人员ID,相反,您需要收集人员ID和课程,然后对其进行过滤。您需要使用多个match

进行过滤
db.getCollection('duptemp').aggregate([
{$group: {_id: '$person', persons: {$addToSet: '$$ROOT'}, count: {$sum:1}}},
{$match: {count: {$gt:1}}},
{$unwind: '$persons'},
{$replaceRoot: {newRoot: '$persons'}},
{$match: {course : 'course name'}}
])

最新更新