Node.js 如何在couchdb和nodejs中使用map/reduce改进视图

Node.js 如何在couchdb和nodejs中使用map/reduce改进视图,node.js,view,mapreduce,couchdb,cradle,Node.js,View,Mapreduce,Couchdb,Cradle,我正在使用带有模块托架的nodejs与couchdb服务器交互,问题是让我了解reduce过程,以改进视图查询 例如,我应该使用如下视图从他的ID获取用户数据: map: function (doc) { emit(null, doc); } 在node.js中(带支架): 正如您所看到的,这对大量文档(数据库中的用户)非常不利,因此我需要使用reduce改进此视图,但我不知道如何改进,因为我不了解reduce的工作原理。。谢谢你首先,你做错了。视图首先是索引,您不应该将它们用于完全扫描操作—

我正在使用带有模块托架的nodejs与couchdb服务器交互,问题是让我了解reduce过程,以改进视图查询

例如,我应该使用如下视图从他的ID获取用户数据:

map: function (doc) { emit(null, doc); }
在node.js中(带支架):


正如您所看到的,这对大量文档(数据库中的用户)非常不利,因此我需要使用reduce改进此视图,但我不知道如何改进,因为我不了解reduce的工作原理。。谢谢你首先,你做错了。视图首先是索引,您不应该将它们用于完全扫描操作——这是无效和错误的。使用具有
开始键
结束键
的Btree索引的幂查询参数,并将要搜索的字段作为键值

其次,您的示例可以很容易地转换为:

db.get(userID, function(err, body) {
    if (!err) {
      // found!
    }
});
因为在循环中,您正在用您的userID值检查行的文档id。不需要那个循环-您可以直接通过他的ID请求文档

第三,如果您的userID值与文档的ID不匹配,则您的视图应该是:

function (doc) { emit(doc.userID, null); }
您的代码如下所示:

db.view('users/getUserByID', {key: userID}, function (err, resp) {
    if (!err) {
      // found!
    }
});
简单。有效。快速的如果需要匹配的单据,可以使用
include\u docs:true
query参数获取

db.view('users/getUserByID', {key: userID}, function (err, resp) {
    if (!err) {
      // found!
    }
});