【发布时间】:2016-11-21 15:28:21
【问题描述】:
我有一个 ionic 应用程序,它将数据存储在其本地 PouchDB 中。
我的数据库存储像这个例子这样的文档:
{
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 个字段并将其应用于过滤。
所以我的应用用户只能选择Timestamp 来搜索特定日期的货币。他可以通过单个Category 等选择过滤器。
他可以创建这 4 个元素的任意组合,例如:
[Timestamp,Category]
[Timestamp,Place]
[Category,Place]
[Timestamp,Responsible]
...
我总是必须按Timestamp 反向排序,但这不是问题。
问题是我找不到任何可以提供这种灵活性的 Map 函数...
我知道如果用户必须填写所有过滤器,我可以轻松使用此 Map 功能:
map:
function (doc) {
emit([Timestamp,Category,Place,Responsible], doc.Name);
}
有了这个,我知道我可以查询这种可能性:
[Timestamp,{}]
[Timestamp,Category,{}]
[Timestamp,Category,Place,{}]
[Timestamp,Category,Place,Responsible]
但我不能只过滤 [Place,Responsible],因为 CouchDB/PouchDB 不允许我将通配符放在左边,比如 [{},{},Place,Responsible],只能放在右边,就像我之前展示的那样。
我知道我可以为每种可能性创建一个地图,但是今天我们有 四个 过滤器,明天可能是 十!
你们中的一些人能告诉我我可以做些什么来掩盖它吗?
我知道我的 SQL 背景应该让我走错方向,但我想用 NoSQL 特别是 CouchDB/PouchDB 创建一个复杂的过滤器不会那么难。
我不可能是第一个尝试这样做的人。
感谢您的帮助!
【问题讨论】:
标签: angularjs ionic-framework couchdb pouchdb nosql