join - SouchL के CouchDB समकक्ष में नहीं?




contains notin (2)

मैं निम्नलिखित LinQ क्वेरी के CouchDB JS दृश्य के बराबर देख रहा हूं:

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

जहां डेटासाइंस के पास फीड्स के लिए एक विदेशी कुंजी है

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

धन्यवाद


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

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

और उस फीड आईडी को फ़िल्टर करने के लिए कम करें, जिसमें उनसे लिंक करने वाले डेटा स्रोत दस्तावेज़ हैं। उदाहरण के लिए। बिल्ड-इन _count और group_level के साथ क्वेरी:

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

डेटाबेस के लिए:

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

तुम्हे दूंगा:

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

मान >1 उन फ़ीड डॉक्स हैं जो डेटा स्रोतों से संदर्भ करते हैं। शुद्ध फीड सूची w / o डेटा स्रोत प्राप्त करने के लिए आप क्लाइंट या सूची फ़ंक्शन में 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 सरणी के लिए भी प्रारूपित कर सकते हैं।


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

मेरे मामले में मैंने निम्नलिखित सूची फ़ंक्शन का उपयोग करने के लिए उन सभी को छोड़कर सभी पंक्तियों का चयन किया था जिनके साथ एक निश्चित बहिष्कार किया गया था I

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 }));
}

आप यहां अधिक पढ़ सकते हैं