【发布时间】:2014-03-12 10:04:02
【问题描述】:
我将出色的 YDN-DB 用作复杂“仪表板”网页的一部分,该网页允许用户下载大量信息,然后按照他们的意愿搜索和过滤数据。
数据以 1 个 UNID 和 6 列可见数据的形式出现,我使用这样的 YDN 模式存储这些数据:
var schema = {
stores: [
{
name: 'test', keyPath: 'unid', autoIncrement: false,
indexes: [
{keyPath: 'a', type: 'TEXT'},
{keyPath: 'b', type: 'TEXT'},
{keyPath: 'c', type: 'TEXT'},
{keyPath: 'd', type: 'DATE'},
{keyPath: 'e', type: 'TEXT'},
{keyPath: 'f', type: 'TEXT'}
]
}
]
};
然后,用户可以在上面的六列中的任何一列中放置一个过滤器。构建过滤器的代码如下所示,并使用 YDN KeyRange 按用户请求的值过滤数据。
var filterArr = []
var resultArr = [];
filterArr.push(new ydn.db.IndexIterator('test', 'a', ydn.db.KeyRange.only('search value 1')));
filterArr.push(new ydn.db.IndexIterator('test', 'b', ydn.db.KeyRange.only('search value 2')));
.. [Continue adding filters for more columns if necessary etc] ..
var req = db.scan(new ydn.db.algo.SortedMerge(resultArr), filterArr);
req.then(function() {
db.values('test', resultArr).done(function(results) {
.. [Display code goes here] ..
})
})
所以对于匹配的值,这很好用。但是,我的问题是用户可以为 D 列指定日期范围,因此我更改了上面的 filterArr 行之一,如下所示:
filterArr.push(new ydn.db.IndexIterator('test', 'd', ydn.db.KeyRange.bound(1389571200000, 1390435200000, false, false)));
这会导致搜索结果不正确。它似乎仅在指定多个 filterArr 值时才会发生。如果我自己过滤 D 列,它似乎可以工作。
对于复杂的查询感到抱歉,真的希望得到某种答案。我花了一些时间调试 SortedMerge JS,我有限的知识表明每次调用 ydn.db.cmp 函数的结果出现问题,所以我想知道这是否是 YDN DB 中的错误?
【问题讨论】:
-
你在 indexeddb 和 websql 中都测试过吗?同样的问题?
-
我在 IE11 & Chrome 中试过了,如何强制使用 WebSQL?
-
在选项中使用
mechanisms。 -
或者,您可以尝试提供 DATE 数据类型。这将强制编码。