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