Node.js 如何在couchdb和nodejs中使用map/reduce改进视图
我正在使用带有模块托架的nodejs与couchdb服务器交互,问题是让我了解reduce过程,以改进视图查询 例如,我应该使用如下视图从他的ID获取用户数据: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的工作原理。。谢谢你首先,你做错了。视图首先是索引,您不应该将它们用于完全扫描操作—
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!
}
});