2010-09-28 60 views
0

我想在couchdb中创建一个动态视图,并且我想问如何在沙发视图中访问参数键。 像如下:视图中的访问键参数

function(doc) { 
    if ((doc['couchrest-type'] == 'User') && ((doc['email'] != null) || (doc['login'] != null))) { 
     if (doc['email'] == parameter[key]) { 
      emit(doc['email'], doc); 
     } else if (doc['login'] == parameter[key]) { 
      emit(doc['login'], doc); 
     } 
    } 
} 

,什么是CouchDB中动态视图的缺点。 以及如何在Couchrest模型中添加这样的动态视图。

感谢, Shenouda博特

回答

2

您不能创建在CouchDB的动态视图。你可能使用临时视图(请参阅this page的底部)做你在这里要做的事情,但临时视图臭名昭着地必须贯穿整个数据库来计算结果,所以你将会有非常可怕的性能并且每个CouchDB资源都会对此提出建议。

视图对于回答诸如“哪些数据与此值匹配?”等问题很有用。或“给我按这个值排序的数据”。它们针对这样做进行了优化,因为map和reduce函数不依赖查询参数,因此可以缓存和增量更新。

你想要做的是“什么数据匹配这个值?”样,所以可以用一个静态的,永久的观点做:

function(doc) { 
    if (doc.type == 'User') { 
     if (doc.email) emit(doc.email, null); 
     if (doc.login) emit(doc.login, null); 
    } 
} 

此视图,可以查询该有一个电子邮件或登录等于某个值的任何文件,所以你会简单地用key正在运行一个查询您正在查找的电子邮件/登录名