2011-02-09 12 views
14

मैं कॉचडब में स्थान डेटा संग्रहीत कर रहा हूं, और कुंजी के बजाय मूल्यों की सरणी प्राप्त करने का एक तरीका ढूंढ रहा हूं: प्रत्येक रिकॉर्ड के लिए मूल्य।कॉचडब JSON प्रतिक्रिया को सरल बनाएं

वर्तमान प्रतिक्रिया

{"total rows": 250, "offset": 0, "rows":[ 
    {"id": "ec5de6de2cf7bcac9a2a2a76de5738e4", "key": "user1", "value": {"city": "San Francisco", "address":"1001 Bayhill Dr"}, 
    {"id": "ec5de6de2cf7bcac9a2a2a76de573ae4","key": "user1", "value": {"city": "Palo Alto", "address":"583 Waverley St"} 
    ... (etc). 
]} 

मैं केवल वास्तव में जरूरत है: उदाहरण के लिए:

[{"city": "San Francisco", "address":"1001 Bayhill Dr"}, 
{"city": "Palo Alto", "address":"583 Waverley St"}, 
...] 

कारण इस सब के लिए बैंडविड्थ की राशि है कि एक JSON प्रतिक्रिया की खपत कम करने के लिए है। मुझे दृश्य को एक सरल सरणी में बदलने का कोई तरीका नहीं दिख रहा है। कोई सुझाव?

धन्यवाद।

उत्तर

19

आप _show and _list फ़ंक्शंस का उपयोग कर सकते हैं, वे या तो एक दस्तावेज़ या दृश्य (क्रमशः) लेते हैं और आपको जो भी प्रारूप चाहिए, उसे एक रूपांतरित प्रतिक्रिया भेज सकते हैं। (इस मामले में, JSON)

अद्यतन: मैंने आपके अपने कॉच डीबी पर दिए गए डेटा के साथ एक सरल परीक्षण चलाया। यहां सूची फ़ंक्शन है जिसे मैंने लिखना समाप्त कर दिया है। अपनी जरूरतों को पूरा करने के लिए इसे अनुकूलित करें। :)

function (head, req) { 
    // specify that we're providing a JSON response 
    provides('json', function() { 
     // create an array for our result set 
     var results = []; 

     while (row = getRow()) { 
      results.push({ 
       city: row.value.city, 
       address: row.value.address 
      }); 
     } 

     // make sure to stringify the results :) 
     send(JSON.stringify(results)); 
    }); 
} 
+0

ग्रेट, धन्यवाद! मैंने वास्तव में शो/सूची फ़ंक्शंस को नहीं देखा था क्योंकि कॉचडब विकी ने सुझाव दिया है कि उनका मुख्य उद्देश्य HTML को सीधे सेवा देना है (मैं गलत था)। बीटीडब्ल्यू, क्या आपको इस तरह के शो/सूची का उपयोग करने के प्रदर्शन प्रभाव का कोई विचार है? मैं खुद कुछ बेंचमार्क भी चलाऊंगा। – Dick

+0

मेरे पास हाथ पर कोई संख्या नहीं है। यह ब्राउज़र-पक्ष पर templating की तुलना में शायद तेज़ (सामान्य रूप से) होगा। इसके अलावा, अंतर्निहित ईटीएजी समर्थन लीवरेज के लिए एक महान कैशिंग तंत्र है। –

+2

आप थोड़ी देर के भीतर JSON भी भेज सकते हैं। फिर लूप के पहले और बाद में इसे एक वैध JSON बनाने के लिए कुछ भेजें (और कॉमा ऑब्जेक्ट को अलग करें)। असल में, भेजें() को जितनी बार चाहें उतनी बार बुलाया जा सकता है न कि केवल समारोह के अंत में। – mikeycgto

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