目前我对 couchdb 的看法总是返回如下内容:
{
"key":"somekey",
"value":"somevalue"
}
我想知道是否有任何方法可以返回这样的东西:
{
"somekey":"somevalue"
}
我需要直接访问“somekey”,而不必在整个数组中搜索带有“somekey”值的键。
谢谢
目前我对 couchdb 的看法总是返回如下内容:
{
"key":"somekey",
"value":"somevalue"
}
我想知道是否有任何方法可以返回这样的东西:
{
"somekey":"somevalue"
}
我需要直接访问“somekey”,而不必在整个数组中搜索带有“somekey”值的键。
谢谢
使用视图时,CouchDB 没有提供直接的方法来将文档集合作为键/值返回,如您所见。
您需要将客户端的数据映射到键控索引,或者直接从视图中通过键请求文档:
/sample/_design/docs/_view/by_somekey?key="somekey"
如果您正在寻找 JavaScript 中的快速映射选项(避免为每次迭代调用一个函数),您当然可以使用这个简单的逻辑:
// docs are the documents returned from the view
var map={};
for(var i=0,len=docs.length;i<len;i++) {
map[docs[i].key] = docs[i].value;
}
您可以使用 underscoreJS ( http://underscorejs.org/#reduce ) 做到这一点。
var map = {
"key":"somekey",
"value":"somevalue"
};
var result = _.reduce(map, function(key, value){
var result = {};
result[key] = value
return result;
});
alert(result.somekey);
如果您不喜欢 Couch 查询的格式或数据,您可以使用list 功能随意重新格式化。像这样的东西应该适合你:
function(head, req){
send('[');
row = getRow();
if (row){
// here you make your own JS structure to be returned,
// serialize it with toJSON() and send to client with send()
// First row:
var new_row = {};
new_row[row.key] = row.value;
send(toJSON(new_row));
while(row = getRow()){
// Next rows:
send(',');
var new_row = {};
new_row[row.key] = row.value;
send(toJSON(new_row));
}
}
return ']';
}