Javascript 返回值作为map reduce上的键
目前,我对couchdb的看法总是返回如下内容:Javascript 返回值作为map reduce上的键,javascript,mapreduce,couchdb,Javascript,Mapreduce,Couchdb,目前,我对couchdb的看法总是返回如下内容: { "key":"somekey", "value":"somevalue" } { "somekey":"somevalue" } 我想知道是否有办法返回这样的东西: { "key":"somekey", "value":"somevalue" } { "somekey":"somevalue" } 我需要直接访问“somekey”,而不必在整个数组中搜索带有“somekey”值的键 谢谢您可以使用下划线()完成
{
"key":"somekey",
"value":"somevalue"
}
{
"somekey":"somevalue"
}
我想知道是否有办法返回这样的东西:
{
"key":"somekey",
"value":"somevalue"
}
{
"somekey":"somevalue"
}
我需要直接访问“somekey”,而不必在整个数组中搜索带有“somekey”值的键
谢谢您可以使用下划线()完成此操作
当使用视图时,CouchDB没有提供直接的方法来返回文档集合,正如您所看到的,除了key/value之外 您需要将客户端上的数据映射到键控索引中,或者直接从视图中通过键请求文档:
/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;
}
//文档是从视图返回的文档
var-map={};
对于(var i=0,len=docs.length;i如果您不喜欢沙发查询的格式或数据,您可以根据自己的意愿使用重新格式化。类似的内容应该适合您:
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 ']';
}
键
不仅可以是字符串,还可以是数组(组合键的常见情况)和对象(罕见情况,因为对键顺序没有任何保证)-在这些情况下,您可能会遇到一些问题。原始文档将位于一个数组中,而不是单个对象。您的代码不适用于Bnif的情况。第一个参数记录为列表。正如您在u.map示例中所看到的,它可以是数组或对象。