name
. के साथ एक संग्रह दस्तावेज़ मान लेना (name
का उपयोग करके url
. के बजाय ) डुप्लिकेट मान वाले फ़ील्ड। मेरे पास दो समेकन हैं जो कुछ आउटपुट लौटाते हैं जिनका उपयोग आगे की प्रक्रिया करने के लिए किया जा सकता है। मुझे आशा है कि आपको यह उपयोगी लगेगा।
{ _id: 1, name: "jack" },
{ _id: 2, name: "john" },
{ _id: 3, name: "jim" },
{ _id: 4, name: "john" }
{ _id: 5, name: "john" },
{ _id: 6, name: "jim" }
ध्यान दें कि "जॉन" में 3 बारंबारताएं हैं और "जिम" में 2 हैं।
(1) यह एकत्रीकरण उन नामों को लौटाता है जिनमें डुप्लिकेट होते हैं (एक से अधिक अवसर):
db.collection.aggregate( [
{
$group: {
_id: "$name",
count: { $sum: 1 }
}
},
{
$group: {
_id: "duplicate_names",
names: { $push: { $cond: [ { $gt: [ "$count", 1 ] }, "$_id", "$DUMMY" ] } }
}
}
] )
आउटपुट:
{ "_id" : "duplicate_names", "names" : [ "john", "jim" ] }
(2) निम्नलिखित एकत्रीकरण केवल _id
लौटाता है डुप्लिकेट दस्तावेज़ों के लिए फ़ील्ड मान। उदाहरण के लिए, "jim" नाम में _id
है मान 3
और 6
. आउटपुट में केवल डुप्लिकेट दस्तावेज़ों के लिए आईडी है, अर्थात, 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" ] }
}
}
}
}
] )
आउटपुट:
{ "_id" : duplicate_ids", "ids" : [ 6, 4, 5 ] }