我正在将应用程序从mySQL迁移到couchDB。 (好的,请不要对此作出判断)。
有一个带签名的功能
getUserBy($column, $value)
现在您可以看到,在SQL的情况下,构建查询并触发它是一项微不足道的工作。
然而,就couchDB而言,我应该用地图函数编写视图
目前我有很多观点,例如
get_user_by_name
get_user_by_email
等等。任何人都可以建议一个更好但可扩展的方式吗?
答案 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()
轻松添加与您的查询匹配的文档。