आप $range
का इस्तेमाल कर सकते हैं 1
. से संख्याओं की सरणियाँ उत्पन्न करने के लिए करने के लिए n
जहां n
$size
है का adds
. फिर आप उन नंबरों के माध्यम से "लूप" कर सकते हैं और जांच सकते हैं कि क्या adds
index
. पर ($arrayElemAt
) index
. से पहले कहीं मौजूद है यदि हां तो इसे डुप्लीकेट माना जाना चाहिए। आप $indexOfArray
का उपयोग कर सकते हैं यह जाँचने के लिए कि तत्व 0 और index
. निर्दिष्ट करने वाले सरणी में मौजूद है या नहीं खोज श्रेणी के रूप में।
फिर आपको बस $project
. का उपयोग करने की आवश्यकता है और $map
इंडेक्स को वास्तविक तत्वों से बदलने के लिए। आप $setUnion
भी जोड़ सकते हैं अंतिम परिणाम सेट में डुप्लिकेट डुप्लिकेट से बचने के लिए।
db.users.aggregate([
{
$addFields: {
duplicates: {
$filter: {
input: { $range: [ 1, { $size: "$adds" } ] },
as: "index",
cond: {
$ne: [ { $indexOfArray: [ "$adds", { $arrayElemAt: [ "$adds", "$$index" ] }, 0, "$$index" ] }, -1 ]
}
}
}
}
},
{
$project: {
_id: 1,
adds: {
$setUnion: [ { $map: { input: "$duplicates", as: "d", in: { $arrayElemAt: [ "$adds", "$$d" ] } } }, [] ]
}
}
}
])
प्रिंट:
{ "_id" : 1, "adds" : [ "111" ] }
{ "_id" : 2, "adds" : [ "555" ] }
{ "_id" : 3, "adds" : [ "888" ] }