目前我对couchdb的看法总是返回如下内容:
{
"key":"somekey",
"value":"somevalue"
}
我想知道是否有办法归还这样的东西:
{
"somekey":"somevalue"
}
我需要直接访问“somekey”而无需在整个数组中搜索带有“somekey”值的键。
由于
答案 0 :(得分:2)
使用视图时,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;
}
答案 1 :(得分:1)
您可以使用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);
答案 2 :(得分:0)
如果您不喜欢Couch查询的格式或数据,可以使用list function随意重新格式化。这样的事情对你有用:
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 ']';
}