nosql - 使用 CouchDB 进行多条件搜索

标签 nosql couchdb

如何从 CouchDB 获取数据,过滤多个字段。

例如,如果我有一个包含姓名、州、国家等字段的人员数据库;和网页上的搜索表单,如何从 CouchDB 获取数据,仅考虑非空条件。

在 SQL 中,我会将条件附加到 where 子句 WHERE Person.Name="John" AND Person.State in ("NY","CA") ,但是我如何将此查询构建为 CouchDB View

最佳答案

在 CouchDB 中,您使用 map/reduce Views。在 SQL 中,您必须明确说明将为哪个字段索引创建。在 CouchDB 中,您编写自定义函数创建索引,因此它可以更具体地满足您的需求。如果您想要搜索名称、州和国家/地区字段等简单事物的索引,则 View 只是一个 map 函数:

function (doc) {
  if (doc.name && doc.state && doc.country)
    emit([doc.name, doc.state, doc.country], doc);
}

要使用此 View 进行搜索,请搜索关键字 ["my_name", "my_state", "my_country"] .您可以使用它来查询名称、州和国家/地区的子集,只要它们是已发出数组的前缀(例如,使用 name 搜索,但不能使用 statecountry 搜索),因为 map 的可搜索结果是按字典序排列。

原则上, View 是具有某些查询功能的索引,但不如 SQL 查询灵活。它们执行一次并存储在磁盘上,并针对新的/修改的数据进行增量计算。请注意,在分布式系统(为 CouchDB 设计的)中很难做效率低下的事情:更复杂的连接,没有索引的搜索......尽管在许多情况下,在结构化时不需要对关系模型中的表进行人工划分文档可用,并且不需要某些连接。

有关 CouchDB 与 SQL 的一些简要比较,请参阅 this chapter of The Definitive Guide书等章节及官方wiki有关 View 的更多信息。

关于nosql - 使用 CouchDB 进行多条件搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272933/

相关文章:

ubuntu - PouchDB - 尝试连接到 CouchDB 时为 "Database encountered an unknown error"

ibm-cloud - 如何批量删除 Cloudant-Node-SDK 中的文档?

couchdb - PouchDB通过ID获取包含特定字符串的文档

mysql - 我将如何使用 DynamoDB 将此用法从我的 mysql 数据库移动到 nosql?

javascript - 有没有办法在 CouchDB 中过滤子文档?

.net - 在RavenDB中更改 “schema”

mongodb - 在 MongoDB 中获取文档而不指定集合

curl - 将 CURL 与 oauth 结合使用用于桌面沙发

node.js - Mongodb - 子集合?

MongoDB到Java的集成