2016-02-25 11 views
7
के लिए प्रविष्टियों के लिए डुप्लीकेट ढूंढना

मैं इस तरह दस्तावेजों:मोंगो दो या अधिक क्षेत्रों

{ 
    "_id" : ObjectId("557eaf444ba222d545c3dffc"), 
    "foreing" : ObjectId("538726124ba2222c0c0248ae"), 
    "value" : "test", 
} 

मैं सभी दस्तावेजों जो जोड़ी foreing & value के लिए मान दोहराया गया है खोजना चाहते हैं।

उत्तर

6

हमें केवल 2 कुंजी के आधार पर समूह करना होगा, और डुप्लीकेट खोजने के लिए 1 से अधिक संख्या वाले तत्वों का चयन करना होगा।

क्वेरी: - जैसे

db.mycollection.aggregate(
    { $group: { 
     _id: { foreing: "$foreing", value: "$value" }, 
     count: { $sum: 1 }, 
     docs: { $push: "$_id" } 
    }}, 
    { $match: { 
     count: { $gt : 1 } 
    }} 
) 

आउटपुट हो जाएगा: - जैसे

{ 
    "result" : [ 
     { 
      "_id" : { 
       "foreing" : 1, 
       "value" : 2 
      }, 
      "count" : 2, 
      "docs" : [ 
       ObjectId("34567887654345678987"), 
       ObjectId("34567887654345678987") 
      ] 
     } 
    ], 
    "ok" : 1 
} 

संदर्भ लिंक हो जाएगा: - How to find mongo documents with a same field

9

आप आसानी से इस आधार पर डुप्लीकेट पहचान कर सकते हैं निम्नलिखित एकत्रीकरण पाइपलाइन ऑपरेशन चला रहा है:

db.collection.aggregate([ 
    { 
     "$group": { 
      "_id": { "foreing": "$foreing", "value": "$value" }, 
      "uniqueIds": { "$addToSet": "$_id" }, 
      "count": { "$sum": 1 } 
     } 
    }, 
    { "$match": { "count": { "$gt": 1 } } } 
]) 

पहले चरण में $group ऑपरेटर foreign और value कुंजी मान द्वारा दस्तावेजों समूह के लिए प्रयोग किया जाता है और उसके बाद का उपयोग कर uniqueIds क्षेत्र के रूप में वर्गीकृत दस्तावेजों से प्रत्येक के लिए _id मूल्यों की एक सरणी बनाने $addToSet ऑपरेटर। यह आपको प्रत्येक समूह के लिए अद्वितीय अभिव्यक्ति मानों की एक सरणी देता है। $sum ऑपरेटर के साथ बाद के पाइपलाइन चरणों में उपयोग करने के लिए समूहित दस्तावेज़ों की कुल संख्या प्राप्त करें।

दूसरी पाइपलाइन चरण में, 1. की गिनती फ़िल्टर्ड बाहर दस्तावेजों अद्वितीय सूचकांक कुंजी का प्रतिनिधित्व के साथ सभी दस्तावेजों को फ़िल्टर करने के $match ऑपरेटर का उपयोग करें।

शेष दस्तावेज संग्रह में होंगे जिनके पास जोड़ी foreing & value के लिए डुप्लिकेट कुंजी मान होंगे।

संबंधित मुद्दे