2013-01-19 57 views
6

मैं निम्नलिखित LINQ क्वेरी का CouchDB जे एस दृश्य समकक्ष के लिए देख रहा हूँ:एसक्यूएल के बराबर कॉच डीबी नहीं?

var query = 
     from f in context.Feed 
     where !(from ds in context.DataSource 
       select ds.Feed_ID) 
     .Contains(f.ID) 
     select f; 

कहाँ datasources फ़ीड के लिए एक विदेशी कुंजी है।

एक शब्द में: सभी एक डेटास्रोत के साथ जुड़ा नहीं फ़ीड प्राप्त करें

+0

आप 'मतलब सब मिल फ़ीड्स किसी विशिष्ट डेटासोर्स से जुड़े नहीं हैं या 'किसी भी डेटा स्रोत से जुड़े सभी फ़ीड प्राप्त नहीं करते हैं'? – joscas

उत्तर

2

आप मानचित्र में फ़ीड और डेटा स्रोतों में शामिल होने के view collation उपयोग कर सकते हैं

धन्यवाद:

function(doc) { 
    if (!doc.type) return; 
    if (doc.type == "feed") emit(doc._id, null); 
    if (doc.type == "ds" && doc.feed) emit(doc.feed, null); 
} 

और करने के लिए कम हो उन फ़ीड आईडी को फ़िल्टर करें जिनके पास डेटा स्रोत दस्तावेज़ हैं। उदाहरण के लिए। group_level साथ build-in_count और क्वेरी के उपयोग:

{"id":"1", "type":"feed"} 
{"id":"2", "type":"feed"} 
{"id":"3", "type":"ds", "feed":1} 
{"id":"4", "type":"ds", "feed":1}} 

आप दे देंगे:

http://127.0.0.1:5984/test/_design/join/_view/not_in?group_level=1 
डेटाबेस के लिए

{"rows":[ 
{"key":"1","value":3}, 
{"key":"2","value":1} 
]} 

मान >1 जो डेटा स्रोतों से संदर्भ है उन फ़ीड डॉक्स हैं । शुद्ध फ़ीड सूची w/o डेटा स्रोतों को प्राप्त करने के लिए आप क्लाइंट या list function में value>1 के साथ रिकॉर्ड छोड़ सकते हैं।

संपादित करें: सूची समारोह के साथ:

function(head, req) { 
    var row; 
    while (row = getRow()) { 
    if (row.value == 1) 
     send(row.key + "\n"); 
    } 
} 

और क्वेरी:

http://127.0.0.1:5984/test/_design/join/_list/not_ds/not_in?group_level=1 

आप डेटा स्रोतों से बाहर संदर्भ के साथ फ़ीड दस्तावेजों के साथ अंतिम परिणाम मिल जाएगा। यह आईडी की सूची के साथ पतला पाठ है, आप इसे JSON सरणी के लिए भी प्रारूपित कर सकते हैं।

0

का सीधा जवाब में एसक्यूएल के समकक्ष CouchDB है: कोई समकक्ष नहीं है। में पर कोई क्वेरीिंग विकल्प नहीं है।

हालांकि, वहाँ यदि आप फ़ीड कोई डेटा स्रोत या एक विशिष्ट डेटा स्रोत से संबद्ध नहीं करने के लिए जुड़े हो रही में रुचि रखते हैं अपने उद्देश्यों को प्राप्त करने के लिए निर्भर करता है वैकल्पिक तरीकों हो सकता है।

0

मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे एक ही समस्या का सामना करना पड़ रहा है, मुझे लगता है कि मार्सीन का जवाब सही है लेकिन अपूर्ण है।

मेरे मामले में मैं एक निश्चित excludeId साथ लोगों को छोड़कर सभी पंक्तियां प्राप्त चयन करने के लिए निम्न सूची समारोह का प्रयोग किया:

function(head, req) { 
start({ 'headers': { 'Content-Type': 'application/json' } }); 
var rows = []; 
while (row = getRow()) { 
    if (!req.query.exceptId || doc.documentId != req.query.exceptId) { 
     rows.push(row); 
    } 
} 
send(JSON.stringify({ total_rows: rows.length, rows: rows })); 
} 

आप पढ़ सकते हैं और अधिक here