私は優れた YDN-DB を複雑な「ダッシュボード」Web ページの一部として使用しています。これにより、ユーザーは大量の情報をダウンロードし、データを好きなように検索およびフィルタリングできます。
データは、次のような YDN スキーマを使用して保存している 1 つの UNID と 6 列の可視データの形式で表示されます。
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'}
]
}
]
};
その後、ユーザーは上記の 6 つの列のいずれかにフィルターを配置できます。フィルターを作成するコードは次のようになり、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 行の 1 つを次のように変更しました。
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 のバグなのだろうか?