在reduce函数中没有返回键

时间:2017-07-19 14:13:28

标签: javascript node.js couchdb couchdb-nano

使用Nano查询NodeJS中的Couch视图,计算所有文档中标记的出现次数。如果我在视图中选择Fauxton中的reduce,它会正确显示每个标记名称作为键和计数。但是,从我的Node应用程序中,我只是得到了Null'作为密钥,以及所有标记的总和。

标记名称(而不是_id)存储在每个文档中。这是我的map函数(使用_count reduce函数):

function (doc, meta) {
  if(doc.tags) {
    for(var i in doc.tags) {
      emit(doc.tags[i],1);
    }
  }
}

这是我在Node中的(Nano)代码:

app.get('/listtags', function(req, res) {
    couch.view('objects', 'tags-count', {reduce: true}, function(err, body) {
        console.log(body);
    });
});

它返回:

{ rows: [ { key: null, value: 8 } ] }

修改 添加示例文档:

标签:

{
"_id": "...",
"_rev": "1-...",
"type": "tag",
"name": "petrol"
}

包含标签的文档:

{
"_id": "...",
"_rev": "3-...",
"type": "car",
"title": "Audi",
"desc": "description here",
"tags": [
  "petrol",
  "aircon",
  "leather seats"
]
}

1 个答案:

答案 0 :(得分:0)

这是因为您必须指定group=true选项或app.get('/listtags', function(req, res) { couch.view('objects', 'tags-count', {reduce: true, group: true}, function(err, body) { console.log(body); }); }); 选项。

例如:

<style type="text/css">
body{
    background-image: url("../../Images/tulip.gif");
    background-repeat: no-repeat;
    background-attachment:fixed;
    color:#665544;
    padding:20px;
}
</style>
 <body>
    <h1>Planting Guide</h1>
    <h2>Magnolia</h2>
    <p>some long text</p>
 </body>