मुझे मूंगो संग्रह में डुप्लिकेट फ़ील्ड कैसे मिलेंगे।
यदि कोई "नाम" फ़ील्ड डुप्लिकेट है, तो मैं जांचना चाहता हूं।
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
बहुत धन्यवाद!
मुझे मूंगो संग्रह में डुप्लिकेट फ़ील्ड कैसे मिलेंगे।
यदि कोई "नाम" फ़ील्ड डुप्लिकेट है, तो मैं जांचना चाहता हूं।
{
"name" : "ksqn291",
"__v" : 0,
"_id" : ObjectId("540f346c3e7fc1054ffa7086"),
"channel" : "Sales"
}
बहुत धन्यवाद!
जवाबों:
एकत्रीकरण का उपयोग करें nameऔर इसके nameसाथ प्राप्त करें count > 1:
db.collection.aggregate(
{"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
)
अधिकांश डुप्लिकेट द्वारा परिणामों को क्रमबद्ध करने के लिए:
db.collection.aggregate(
{"$group" : { "_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"_id" :{ "$ne" : null } , "count" : {"$gt": 1} } },
{"$sort": {"count" : -1} },
{"$project": {"name" : "$_id", "_id" : 0} }
)
"नाम" की तुलना में किसी अन्य स्तंभ नाम के साथ उपयोग करने के लिए, " $ नाम " को " $ column_name " में बदलें
"$match": {"_id" :{ "$ne" : null } - यहाँ अनावश्यक है, क्योंकि कथन का दूसरा भाग परिणाम को फ़िल्टर करने के लिए पर्याप्त होगा। तो केवल होने वाले समूह के लिए जाँच count > 1करेगा।
_idमैदान की जांच क्यों । यह हमेशा groupऑपरेशन के बाद शून्य नहीं होने की गारंटी है ।
_idएक से एक दस्तावेज़ के $groupचरण अशक्त हो सकता है।
आप पा सकते हैं listकी duplicateनिम्न का उपयोग कर नाम aggregateपाइपलाइन:
Groupसभी रिकॉर्ड समान हैं name।Matchउन groupsहोने रिकॉर्ड की तुलना में अधिक 1।groupसे projectएक array।कोड:
db.collection.aggregate([
{$group:{"_id":"$name","name":{$first:"$name"},"count":{$sum:1}}},
{$match:{"count":{$gt:1}}},
{$project:{"name":1,"_id":0}},
{$group:{"_id":null,"duplicateNames":{$push:"$name"}}},
{$project:{"_id":0,"duplicateNames":1}}
])
ओ / p:
{ "duplicateNames" : [ "ksqn291", "ksqn29123213Test" ] }
यदि आपके पास एक बड़ा डेटाबेस है और आपके पास विशेषता नाम केवल कुछ दस्तावेज़ों में मौजूद है, तो आपके द्वारा दिया गया उत्तर बहुत ही अयोग्य हो सकता है।
दक्षता में सुधार के लिए आप एकत्रीकरण के लिए एक $ मैच जोड़ सकते हैं।
db.collection.aggregate(
{"$match": {"name" :{ "$ne" : null } } },
{"$group" : {"_id": "$name", "count": { "$sum": 1 } } },
{"$match": {"count" : {"$gt": 1} } },
{"$project": {"name" : "$_id", "_id" : 0} }
)
db.getCollection('orders').aggregate([
{$group: {
_id: {name: "$name"},
uniqueIds: {$addToSet: "$_id"},
count: {$sum: 1}
}
},
{$match: {
count: {"$gt": 1}
}
}
])
पहले समूह को खेतों के अनुसार समूह का प्रश्न करें।
फिर हम अद्वितीय आईडी की जांच करते हैं और इसे गिनते हैं, यदि गिनती अधिक है तो 1 पूरे क्षेत्र में डुप्लिकेट है, इसलिए उस चीज़ को $ मैच क्वेरी द्वारा संभालना है।