Angularjs 使用CouchDB创建复杂过滤器
我有一个ionic应用程序,它将数据存储在本地数据库中 我的数据库存储的文档如下示例所示:Angularjs 使用CouchDB创建复杂过滤器,angularjs,ionic-framework,couchdb,pouchdb,nosql,Angularjs,Ionic Framework,Couchdb,Pouchdb,Nosql,我有一个ionic应用程序,它将数据存储在本地数据库中 我的数据库存储的文档如下示例所示: { Timestamp: "2016-11-17T09:35:06", Category: "CAT_1", Place: "House", ... Responsible: "Foo Bar", ... }, { Timestamp: "2016-11-07T18:45:11", CategoryCode: "CAT_2", Pla
{
Timestamp: "2016-11-17T09:35:06",
Category: "CAT_1",
Place: "House",
...
Responsible: "Foo Bar",
...
},
{
Timestamp: "2016-11-07T18:45:11",
CategoryCode: "CAT_2",
Place: "Apartment",
...
Responsible: "Bar Foo",
...
}
我的ionic应用程序需要一个过滤屏幕,用户可以在其中选择这4个字段中的任何/所有字段,并将其应用于过滤
因此,我的应用程序用户只能选择时间戳
来搜索特定日期的眼波。他可以选择按单个类别过滤所有内容,依此类推
他可以创建这4个元素的任意组合,如:
[Timestamp,Category]
[Timestamp,Place]
[Category,Place]
[Timestamp,Responsible]
...
我总是要按时间戳倒序,但这不是问题所在
问题是我找不到任何映射函数可以提供这种灵活性
我知道,如果用户必须填写所有过滤器,我可以轻松使用此映射功能:
map:
function (doc) {
emit([Timestamp,Category,Place,Responsible], doc.Name);
}
有了这个,我知道我可以质疑这种可能性:
[Timestamp,{}]
[Timestamp,Category,{}]
[Timestamp,Category,Place,{}]
[Timestamp,Category,Place,Responsible]
但是我不能只按[Place,Responsible]
进行筛选,因为CouchDB/PockDB不允许我将通配符放在左边,比如[{},{},Place,Responsible]
,只放在右边,就像我之前展示的那样
我知道我可以为每个可能性创建一个映射,但今天我们有四个过滤器,明天可以是十个
你们中的一些人能告诉我我能做些什么来报道它吗
我知道我的SQL背景应该让我走错了方向,但我想用NoSQL和CouchDB/DB创建一个复杂的过滤器并不难
我不可能是第一个这么做的人
谢谢你的帮助 我认为在Couchdb中没有这样的过滤器,因为在其他NoSQL数据库中没有这样的方法。即使对于SQL数据库,如果在[Timestamp,Category,Place,Responsible]
上有索引,也不能将其用于搜索[{},{},Place,Responsible]
您可以考虑使用CouChDB的全职搜索,您可以指定任何字段的组合来搜索任意顺序:
这里需要注意的是,搜索只检索前200条记录,之后您需要发出额外的请求对结果进行分页,同时保持数据库不被修改