2016-12-19 6 views
6

मेरे पास दो मोंगो संग्रह हैं, जो एक उत्पादन env और दूसरे को परीक्षण env को संदर्भित करता है। मैं उनमें से दो के बीच एक अंतर की तुलना कैसे करूं? मैंने उन्हें एक बासन के लिए डंप करने और फिर एक जेसन में बदलने की कोशिश की। लेकिन मैं सिर्फ उन पर एक साधारण अंतर नहीं कर सकता क्योंकि सॉर्टिंग भिन्न हो सकती है और जेसन फ़ाइल सॉर्ट करने के लिए बहुत बड़ी है।दो संग्रहों पर एक मोंगो डिफ की तुलना करें

उत्तर

5

शैल में निम्न का प्रयास करें, यह प्रत्येक आइटम को संग्रह में पुन: सक्रिय करेगा और आईडी के आधार पर प्रत्येक दस्तावेज़ से मिलान करने का प्रयास करेगा। हम तो 2 संग्रह

function compareCollection(col1, col2){ 
    if(col1.count() !== col2.count()){ 
     return false; 
    } 

    var same = true; 

    var compared = col1.find().forEach(function(doc1){ 
     var doc2 = col2.findOne({_id: doc1._id}); 

     same = same && JSON.stringify(doc1)==JSON.stringify(doc2); 
    }); 

    return same; 
} 

फिर फोन की तुलना करने के लिए एक जावास्क्रिप्ट समारोह बना सकते हैं

> db.col1.find() 
{ "_id" : 1, "item" : 1 } 
{ "_id" : 2, "item" : 2 } 
{ "_id" : 3, "item" : 3 } 
{ "_id" : 4, "item" : 4 } 

> db.col2.find() 
{ "_id" : 1, "item" : 1 } 
{ "_id" : 2, "item" : 2 } 
{ "_id" : 3, "item" : 3 } 
{ "_id" : 4, "item" : 4 } 

है जैसे निम्नलिखित:

कहते हैं कि हम 2 संग्रह db.col1 और db.col2 है

> compareCollection(db.col1, db.col2) 
true 

यदि हमारे पास तीसरा संग्रह है db.col3

> db.col3.find() 
{ "_id" : 1, "item" : 1 } 

और यह एक

> compareCollection(db.col1, db.col3) 
false 

हम अपेक्षित परिणाम मिल जाएगा की तुलना करें।

हम भी एक 4 संग्रह जो मिलान दस्तावेजों लेकिन अलग डेटा db.col4

> db.col4.find() 
{ "_id" : 1, "item" : 10 } 
{ "_id" : 2, "item" : 2 } 
{ "_id" : 3, "item" : 3 } 
{ "_id" : 4, "item" : 4 } 

है है, तो यह भी वापस आ जाएगी false

> compareCollection(db.col1, db.col4) 
false 
+0

यह बहुत उपयोगी है, धन्यवाद! –

1

आप क्षेत्रों में से केवल एक उप समूह की तुलना करने की जरूरत है (उदाहरण के लिए आपको आईडी की तुलना करने की आवश्यकता नहीं है), आप इसे निम्न तरीके से कर सकते हैं। , सीएसवी को संग्रह निर्यात क्षेत्रों को निर्दिष्ट तुलना करने के लिए (source):

mongoexport -d <db_name> -c <col_name> --fields "field1,field2" --type=csv | sort > export.csv 

और फिर csv फ़ाइलें पर एक साधारण diff है। ध्यान दें कि सीएसवी फ़ाइल में कॉलम ऑर्डर --field विकल्प से मेल खाता है।

सकारात्मक:

  • आप तुलना करने के लिए क्षेत्रों के सबसेट निर्दिष्ट कर सकते हैं।
  • आप रिकॉर्ड के वास्तविक अंतर को देख सकते हैं।

विपक्ष:

  • पूरा रिकॉर्ड तुलना करने के लिए, आप सभी संभावित क्षेत्रों जानना चाहते हैं।
  • mongoexport विशाल डेटाबेस के लिए धीमा हो सकता है।
0

मॉन्गोड की तुलना करने के लिए स्टूडियो 3T का उपयोग करें। आप संग्रह, डीबी, एकल रिकॉर्ड की तुलना भी कर सकते हैं। बस आपको मोंगो डाउनलोड और कनेक्ट करने की आवश्यकता है।

use db_name 
db.runCommand('dbHash') 

यह प्रत्येक संग्रह के लिए हैश मान देता है: यहाँ डाउनलोड लिंक https://studio3t.com/

+0

शायद आप उस विशिष्ट टूल में इसे कैसे करें इस पर कुछ ट्यूटोरियल में कुछ लिंक जोड़ सकते हैं। – testuser

+0

विशेष रूप से क्योंकि यह सुविधा मुफ्त संस्करण का हिस्सा नहीं है ("सस्ता" लाइसेंस भी नहीं), लेकिन केवल एंटरप्राइज़ संस्करण का ... यदि किसी के पास उपकरण है, तो असली ट्यूटोरियल का लिंक यहां है: https : //studio3t.com/whats-new/diff-mongodb/ utm_source = पोस्ट और utm_medium = अमेरिकन प्लान और utm_campaign = 3tslpage – testuser

2

dbHash चाल किया गया है। फिर आप उनकी तुलना कर सकते हैं। यह बहुत सटीक है।

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