2011-02-09 65 views
14

我正在將位置數據存儲在Couchdb中,並且正在尋找一種方法來獲取只有值的數組,而不是每個記錄的key:value。例如:簡化Couchdb 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)

更新:我對您在我自己的CouchDB上提供的數據進行了簡單的測試。這是我寫完的列表功能。定製它以適應您的需求。 :)

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

太好了,謝謝!由於Couchdb維基建議他們的主要目的是直接提供HTML(我錯了),所以我沒有真正查看show/list函數。 順便說一下,你有沒有使用這樣的顯示/列表的性能影響的想法?我也會自己運行一些基準測試。 – Dick 2011-02-09 23:37:02