如何为以下情况设计couchdb视图?

时间:2011-10-12 08:08:29

标签: couchdb mapreduce

我正在将应用程序从mySQL迁移到couchDB。 (好的,请不要对此作出判断)。

有一个带签名的功能

getUserBy($column, $value) 

现在您可以看到,在SQL的情况下,构建查询并触发它是一项微不足道的工作。

然而,就couchDB而言,我应该用地图函数编写视图

目前我有很多观点,例如

get_user_by_name
get_user_by_email 

等等。任何人都可以建议一个更好但可扩展的方式吗?

1 个答案:

答案 0 :(得分:3)

当然!我最喜欢的观点之一是by_field。这是一个非常简单的地图功能。

function(doc) {
    // by_field: map function
    // A single view for every field in every document!
    var field, key;

    for (field in doc) {
        key = [field, doc[field]];
        emit(key, 1);
    }
}

假设您的文档名称中包含.name字段,并且其电子邮件地址为.email

按名称获取用户(例如“Alice”和“Bob”):

GET /db/_design/example/_view/by_field?include_docs=true&key=["name","Alice"]
GET /db/_design/example/_view/by_field?include_docs=true&key=["name","Bob"]

通过电子邮件从同一视图获取用户:

GET /db/_design/example/_view/by_field?include_docs=true&key=["email","alice@gmail.com"]
GET /db/_design/example/_view/by_field?include_docs=true&key=["name","bob@gmail.com"]

我希望发出1的原因是您可以稍后编写reduce函数以使用sum()轻松添加与您的查询匹配的文档。