目前我对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);
原始文档将位于数组中,而不是单个对象。你的代码不适用于Bnif的情况。 – WiredPrairie
第一个参数记录为列表。正如你在_.map例子中看到的那样,它可能是一个数组或对象。 –
你的代码不适用于数组。 – WiredPrairie
如果你不喜欢的沙发查询的格式或数据,你可以在你将它重新格式化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 ']';
}
''key'不仅可以是字符串,你可能会遇到这些情况的一些问题。 – Kxepal