MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

pymongo:डुप्लिकेट हटाएं (मानचित्र कम करें?)

एक वैकल्पिक तरीका एकत्रीकरण ढांचे जिसमें मैप-रिड्यूस की तुलना में बेहतर प्रदर्शन है। निम्नलिखित एकत्रीकरण पाइपलाइन पर विचार करें, जो एकत्रीकरण पाइपलाइन के पहले चरण के रूप में, $group ऑपरेटर दस्तावेज़ों को ID . द्वारा समूहित करता है unique_ids . में फ़ील्ड और स्टोर करें प्रत्येक को फ़ील्ड करें _id $addToSet ऑपरेटर। $sum संचायक ऑपरेटर इसे पास किए गए क्षेत्रों के मूल्यों को जोड़ता है, इस मामले में निरंतर 1 - जिससे गिनती क्षेत्र में समूहीकृत रिकॉर्ड की संख्या की गणना होती है। अन्य पाइपलाइन चरण $match कम से कम 2, यानी डुप्लिकेट की गिनती वाले दस्तावेज़ों को फ़िल्टर करता है।

एक बार जब आप एकत्रीकरण से परिणाम प्राप्त कर लेते हैं, तो आप पहले _id को निकालने के लिए कर्सर को पुनरावृत्त करते हैं unique_ids . में फ़ील्ड, फिर बाकी को एक सरणी में धकेलें जिसका उपयोग बाद में डुप्लिकेट को हटाने के लिए किया जाएगा (माइनस वन एंट्री):

cursor = db.coll.aggregate(
    [
        {"$group": {"_id": "$ID", "unique_ids": {"$addToSet": "$_id"}, "count": {"$sum": 1}}},
        {"$match": {"count": { "$gte": 2 }}}
    ]
)

response = []
for doc in cursor:
    del doc["unique_ids"][0]
    for id in doc["unique_ids"]:
        response.append(id)

coll.remove({"_id": {"$in": response}})


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. वस्तुओं की सरणी पर Mongoose / MongoDB $addToSet कार्यक्षमता का उपयोग करना

  2. डेलाइट सेविंग ऑफ़सेट के साथ तिथि के अनुसार कुल समूह

  3. MongoDB 3.0 . में अपडेट होने के बाद Heroku ऐप क्रैश हो जाता है

  4. मैं शुरुआत से वादा श्रृंखला को सशर्त रूप से कैसे पुनः आरंभ करूं?

  5. मैं जावा ड्राइवर का उपयोग करके मोंगोडीबी के लिए $ या क्वेरी कैसे बना सकता हूं?