Förutsatt att en samling dokument med name
(med name
istället för url
) fält som består av dubbletter av värden. Jag har två aggregationer som returnerar en del utdata som kan användas för att göra ytterligare bearbetning. Jag hoppas att du kommer att ha nytta av detta.
{ _id: 1, name: "jack" },
{ _id: 2, name: "john" },
{ _id: 3, name: "jim" },
{ _id: 4, name: "john" }
{ _id: 5, name: "john" },
{ _id: 6, name: "jim" }
Observera att "john" har 3 förekomster och "jim" har 2.
(1) Denna aggregering returnerar namnen som har dubbletter (mer än en förekomst):
db.collection.aggregate( [
{
$group: {
_id: "$name",
count: { $sum: 1 }
}
},
{
$group: {
_id: "duplicate_names",
names: { $push: { $cond: [ { $gt: [ "$count", 1 ] }, "$_id", "$DUMMY" ] } }
}
}
] )
Utdata:
{ "_id" : "duplicate_names", "names" : [ "john", "jim" ] }
(2) Följande aggregering returnerar bara _id
fältvärden för dubblettdokumenten. Till exempel har namnet "jim" _id
värden 3
och 6
. Utdatat har bara id:n för dubblettdokumenten, dvs. 6
.
db.colection.aggregate( [
{
$group: {
_id: "$name",
count: { $sum: 1 },
ids: { $push: "$_id" }
}
},
{
$group: {
_id: "duplicate_ids",
ids: { $push: { $slice: [ "$ids", 1, 9999 ] } }
}
},
{
$project: {
ids: {
$reduce: {
input: "$ids",
initialValue: [ ],
in: { $concatArrays: [ "$$this", "$$value" ] }
}
}
}
}
] )
Utdata:
{ "_id" : duplicate_ids", "ids" : [ 6, 4, 5 ] }