2012-01-27 19 views
5

में डुप्लिकेट की पहचान करना मैं सामान्य रूप से कॉच डीबी और दस्तावेज़-उन्मुख डेटाबेस में नया हूं।कॉच डीबी

मैं कोच डीबी के साथ खेल रहा हूं, और डेटा को क्वेरी करने और विचार बनाने के लिए फ़्यूटन में मानचित्र/कम करने के कार्यों से परिचित होने में सक्षम था।

उन चीजों में से एक जो मैं अभी भी पता लगाने की कोशिश कर रहा हूं यह है कि फ़्यूटन के मानचित्र/घटाकर दस्तावेज़ों में डुप्लिकेट मानों की पहचान कैसे करें।

उदाहरण के लिए, अगर मैं निम्नलिखित दस्तावेज है:

{ 
    "_id": "123", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:06:03Z" 
} 

{ 
    "_id": "124", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:07:03Z" 
} 

और मैं था कि नकल "नाम" मान दस्तावेज़ आईडी के की एक सूची प्राप्त करना चाहता था, यह कुछ मैं के साथ फ्यूटन मानचित्र कर सकता है/कम करें?

परिणाम हासिल करने की उम्मीद की गई थी इस प्रकार है:

{ 
    "name": "carl", 
    "dupes": [ "123", "124" ] 
} 

..or ..

{ 
    "carl": [ "123", "124" ] 
} 

.. जो मूल्य, और संबद्ध दस्तावेज़ आईडी जो उन डुप्लिकेट मानों को शामिल किया जाएगा ।

मैंने मानचित्र/घटा के साथ कुछ अलग-अलग चीजों की कोशिश की है, लेकिन जहां तक ​​मैं समझता हूं, नक्शा फ़ंक्शन प्रति-दस्तावेज़ आधार पर डेटा के साथ काम करता है, और कम करने के कार्य केवल आपको कुंजी/किसी दिए गए दस्तावेज़ से मूल्य।

मुझे पता है कि मैं सिर्फ उस डेटा को खींच सकता हूं जो मुझे पर्ल के साथ चाहिए, वहां जादू का काम करें, और नतीजा प्राप्त करें, लेकिन मैं केवल इसके फायदे/सीमाओं को बेहतर ढंग से समझने के लिए कॉच डीबी के साथ काम करने की कोशिश कर रहा हूं।

एक और तरीका है मैं कर रहा यह एक आरडीबीएमएस मेज की तरह एक एकल दस्तावेज़ उपयोग करने के लिए है के बारे में सोच रहा हूँ:

{ 
    "_id": "names", 
    "rec1": { 
    "_id": "123", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:06:03Z" 
    }, 
    "rec2": { 
    "_id": "124", 
    "name": "carl", 
    "timestamp": "2012-01-27T17:07:03Z" 
    } 
} 

.. जो मुझे मानचित्र/का उपयोग जिस तरह से मैं मूल रूप से सोचा में कार्यों को कम करने के लिए अनुमति चाहिए । हालांकि मुझे यकीन नहीं है कि यह आदर्श है या नहीं।

मैं समझता हूं कि मेरा दिमाग अभी भी आरडीबीएमएस भूमि में फंस गया है, इसलिए मैं जो कुछ भी करने की कोशिश कर रहा हूं वह आवश्यक नहीं हो सकता है। इस पर कोई अंतर्दृष्टि बहुत सराहना की जाएगी।

धन्यवाद!

संपादित करें: कुछ उदाहरणों में निश्चित JSON वाक्यविन्यास।

उत्तर

7

यदि आप केवल अद्वितीय मूल्यों की एक सूची चाहते हैं, तो यह बहुत आसान है। यदि आप डुप्लिकेट की पहचान करना चाहते हैं, तो यह कम आसान हो जाता है।

दोनों ही मामलों में, एक नक्शा समारोह इस तरह पर्याप्त होना चाहिए:

function (doc) { 
    emit(doc.name); 
} 

अपने को कम समारोह के लिए, बस _count दर्ज करें।

आपके व्यू उत्पादन तरह दिखेगा: (अपने 2 दस्तावेजों के आधार पर)

{ 
    "rows": [ 
     { "key": "carl", "value": 2 } 
    ] 
} 

वहाँ से, आप नामों की सूची के साथ ही उनके आवृत्ति होगा।आप उस सूची को ले सकते हैं और इसे स्वयं फ़िल्टर कर सकते हैं, या आप "सभी सोफे" मार्ग ले सकते हैं और अंतिम फ़िल्टरिंग करने के लिए _list function का उपयोग कर सकते हैं।

function (head, req) { 
    var row, duplicates = []; 
    while (row = getRow()) { 
     if (row.value > 1) { 
      duplicates.push(row); 
     } 
    } 
    send(JSON.stringify(duplicates)); 
} 

तक पढ़ा गया _list के बारे में काम करता है, वे बहुत आसान और बहुमुखी कर रहे हैं।

+0

... और डुप्लिकेट आईडी प्राप्त करने के लिए: ? Skip = 1 और कम = झूठी और कुंजी = "कार 1" –

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