2011-05-28 9 views
5

मुझे पता है कि आप कोचडीबी में रिकॉर्ड वापस करने के लिए एक कुंजी या सीमा पारित कर सकते हैं, लेकिन मैं ऐसा कुछ करना चाहता हूं। एक्स मान खोजें जो एक्स मान हैं।कॉच डीबी के साथ समग्र कुंजी, एकाधिक रिकॉर्ड

तो उदाहरण के लिए, नियमित एसक्यूएल में, मान लें कि मैं 5, 7, 2 9, 102 के साथ रिकॉर्ड वापस करना चाहता हूं। मैं कुछ इस तरह करना होगा:

SELECT * FROM sometable WHERE id = 5 OR id = 7 or id = 29 or id = 102 

यह CouchDB, जहां मैं सभी मूल्यों मैं कुंजी सरणी में लगाना चाहते हैं टॉस में यह करने के लिए संभव है, और फिर CouchDB गए रिकॉर्ड मौजूद हो सकता है सभी के लिए खोज "कुंजी पैरामीटर" में?

उत्तर

4

आप एक पोस्ट as documented on CouchDB wiki कर सकते हैं। आप अनुरोध के शरीर में चाबियों की सूची पास करते हैं।

{"keys": ["key1", "key2", ...]} 

नकारात्मकता यह है कि एक पोस्ट अनुरोध ब्राउज़र द्वारा कैश नहीं किया जाता है।

वैकल्पिक रूप से, आप keys पैरामीटर के साथ एक GET का उपयोग कर एक ही प्रतिक्रिया प्राप्त कर सकते हैं।

/DB/_all_docs?keys=["ID1","ID2"]&include_docs=true 

जो ठीक से यूआरएल इनकोडिंग, हो जाता है: उदाहरण के लिए, आप के साथ दृश्य _all_docs क्वेरी कर सकता है

/DB/_all_docs?keys=%5B%22ID1%22,%22ID2%22%5D&include_docs=true 

इस बेहतर cacheability देना चाहिए, लेकिन ध्यान रखें कि प्रत्येक दस्तावेज़ अद्यतन पर _all_docs परिवर्तन । कभी-कभी, आप केवल अपने आवश्यक विचारों के साथ अपने स्वयं के विचार को परिभाषित करके इसे हल कर सकते हैं।

+1

और प्रदर्शन एक प्रश्न के समान नहीं है (यहां तक ​​कि चाबियों की एक श्रृंखला के लिए)। आंतरिक रूप से, कॉच डीबी बस प्रत्येक कुंजी के लिए लुकअप को फिर से चलाता है। आप जो भी बचाते हैं वह राउंड-ट्रिप HTTP विलंबता है। (इसके अलावा आपका कोड कम बग के साथ आसान हो सकता है।) – JasonSmith

2

सीधे दृश्य समारोह के साथ, यह संभव नहीं होगा। हालांकि, आप एक ही परिणाम को पूरा करने के लिए _list फ़ंक्शन का उपयोग कर सकते हैं।

+0

आप इसे किसी भी दृश्य (यहां तक ​​कि _all_docs) पर भी कर सकते हैं, लेकिन आपको GET के बजाय POST करने की आवश्यकता है। –

+2

कुंजी की एक सूची के साथ पोस्ट करना एक कामकाज है। यह वाक्य रचनात्मक चीनी नहीं है, यानी एक ही चीज़ लेकिन अधिक सुविधाजनक है। यह ** एक ही बात नहीं ** है। आंतरिक रूप से, कॉच डीबी प्रत्येक कुंजी को एक-एक करके देखता है। प्रदर्शन और स्केलेबिलिटी एक जीईटी कुंजी (या कुंजी रेंज) लुकअप के समान नहीं है। हालांकि मार्सेलो अपने जवाब में दिखाता है, यह वास्तव में बहुत सुविधाजनक हो सकता है। – JasonSmith

+0

मुझे लगता है कि यह निर्भर करता है कि कुंजी की सूची हमेशा एक ही है, या आप "रन-टाइम" पर कुंजी की सूची निर्दिष्ट करने में सक्षम होना चाहते हैं या नहीं। यदि सूची एक निश्चित सूची है, तो आप एक एकल इंडेक्स (_list फ़ंक्शन) बना सकते हैं जो मिलान करने वाले दस्तावेज़ लौटाता है। यदि सूची मनमाने ढंग से (पैरामीटर) है, तो couchdb को प्रत्येक कुंजी के लिए "लुकअप चलाएं" होगा, इसलिए आप पोस्ट विधि से बेहतर नहीं कर सकते हैं। –

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