我有一个结构如下的集合:
{
"_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'}}
])