मुझे मूंगो संग्रह में डुप्लिकेट फ़ील्ड कैसे मिलेंगे।
यदि कोई "नाम" फ़ील्ड डुप्लिकेट है, तो मैं जांचना चाहता हूं।
{
"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 पूरे क्षेत्र में डुप्लिकेट है, इसलिए उस चीज़ को $ मैच क्वेरी द्वारा संभालना है।