来自db的响应是偏移的,而不是使用map函数返回的所有结果

时间:2016-05-17 18:51:05

标签: node.js view couchdb cloudant

为什么offset: 1

我希望在rows的响应中看到2 Cloudant,因为total_rows表示,但由于某种原因它的偏移因此只有1行响应。

控制台输出:

{ total_rows: 2,
  offset: 1,
  rows: 
   [ { id: '1e0a2d30d18d95b9bcc05d92c883d496',
       key: '1e0a2d30d18d95b9bcc05d92c883d496',
       value: [Object] } ] }

调用该函数,处理响应:

viewImpl('test', 'something').then(function(result) {

  result.rows.forEach(function(doc) {
    console.log(doc.value);
  });

  res.status(200).send('done');
  }
}).catch(someFunc());

功能定义:

App.prototype.viewImpl = function(designName, viewName) {
  return new Promise(function(fulfill, reject) {
    _this.db.view(designName, viewName, { keys: ["1e0a2d30d18d95b9bcc05d92c883d496","1e0ad30d18d95b9bcc05d92c883e272"] }, function(err, result) {
      if (err) {
        reject(err);
      } else {
        fulfill(result);
      }
    });
  });
};

Cloudant中定义的视图:

function(doc) {
    emit(doc._id, { _id: doc._id, _rev: doc._rev, some_field: doc.some_field });
}

1 个答案:

答案 0 :(得分:1)

查看view()功能提供的密钥:

1e0a2d30d18d95b9bcc05d92c883d496
1e0ad30d18d95b9bcc05d92c883e272

第二个键是一个字符更短 - 它只有31个字符而不是32个。我猜你刚从文档ID复制粘贴它时错过了最后一个字符。

删除键参数以查看所有行,然后检查第二行的正确键是什么并更新代码。