如何从CouchDB获取数据,过滤多个字段.
例如,如果我有一个人员数据库,其中包含姓名,州,国家等字段; 以及网页上的搜索表单,如何仅考虑非空条件,如何从CouchDB获取数据.
在SQL中,我会将条件附加到where子句WHERE Person.Name="John" AND Person.State in ("NY","CA"),但如何将此查询框架为CouchDB视图
在CouchDB中,您使用map/reduce视图.在SQL中,您必须明确说明将创建哪个字段索引.在CouchDB中,您编写自定义函数创建索引,因此它可以更具体地满足您的需求.如果你想要索引这样一个简单的事情,如搜索名称,州和国家字段,视图只是一个地图功能:
function (doc) {
if (doc.name && doc.state && doc.country)
emit([doc.name, doc.state, doc.country], doc);
}
Run Code Online (Sandbox Code Playgroud)
要使用此视图进行搜索,请搜索密钥["my_name", "my_state", "my_country"].您可以使用它来查询名称,州和国家的子集,只要它们是发射数组的前缀(例如,搜索name但不使用state和country),因为地图的可搜索结果按字典顺序排序.
原则上,视图是具有查询某些功能的索引,但不像SQL查询那样灵活.它们被执行一次并存储在磁盘上,并逐步计算新的/修改的数据.请注意,在分布式系统(设计CouchDB)中很难做低效率的事情:更复杂的连接,没有索引的搜索......虽然,在很多情况下,在结构化时不需要对关系模型中的表进行人工划分文档可用,并且不需要某些连接.
有关CouchDB与SQL的简要比较,请参阅The Definitive Guide一书的这一章以及其他章节和官方Wiki,以获取有关视图的更多信息.
| 归档时间: |
|
| 查看次数: |
2609 次 |
| 最近记录: |