如何使用 YDN-DB 在 keypath 之后获取下一个元素
Posted
技术标签:
【中文标题】如何使用 YDN-DB 在 keypath 之后获取下一个元素【英文标题】:How to get the next element after keypath using YDN-DB 【发布时间】:2014-10-22 10:10:51 【问题描述】:我正在尝试构建一个函数,该函数在传递的 keypath 之后检索存储中的下一个元素。我的 getItem 看起来像这样。
req = smartpigsdb.get(store, keypath);
req.done(function(record)
if(record!==undefined || typeof record=='object')
// do something with the record
else console.log('error getItem: ' + e);
);
req.fail(function(e)
console.log(e);
);
如何使用 YDN-DB 实现这一目标?
【问题讨论】:
【参考方案1】:如果您不知道密钥,则不能使用get
。您必须使用values
来进行迭代记录。限制为 1,这样您就只能得到一个结果。你可以使用你的know key的lowerBound keyRange,这样你就会得到key之后的下一个对象。
【讨论】:
我快到了。我创建了一个 ValueIterator: var iter = new ydn.db.ValueIterator(store, '>', idx);要获得数据库中的下一项,我会这样做: db.values(iter, 1).done(function(item) console.log('JSON.stringify(item)););但我的密钥路径可能像“1”、“3”、“3a”、“3b”、...、“10”、“11”、“11a”...等等。我想在“ 1" 这是项目 keypath = "2" 但我得到的是 keypath = "10" 的项目。如何检索所需的项目?在我的情况下“2”感谢您的帮助。弗罗林 Indexeddb 排序键根据 ICU 排序,所以“10”在“2”之前。您可能想改用数字类型键。 顺便说一句,你的意思是key
,而不是keyPath
。这两个是不同的。【参考方案2】:
最后我做了这样的事情,它有效,但我不确定是不是最好的方法。 'idx' 是存储对象存储的索引。
var range = new ydn.db.KeyRange.lowerBound(index+1);
var iter = new ydn.db.Iterator(store, 'idx', range); // 'idx' is an index for store object store
db.values(iter, 1).done(function(item)
if(item.length > 0)
var req = db.get(store, item[0]);
req.done(function(record)
if(record!==undefined || typeof record=='object')
// do soemthing with the record
else
console.log('record could not be found');
);
req.fail(function(e)
console.log(e);
);
);
如果我想检索以前的记录,我用range = new ydn.db.KeyRange.upperBound(index);
尝试了同样的事情,但我总是从商店获得第一条记录,所以我改用range = new ydn.db.KeyRange.lowerBound(index-1);
请给我一些反馈。再次感谢图书馆。 问候,弗洛林。
【讨论】:
试试db.from('store').where('idx', '>', index).get().done(...
?
是的,我刚试过。但不是 .get() 从上面我使用 list(1) 像这样: smartpigsdb.from(store).where('idx', '>', index).list(1).done(function(item) if(item!==null || item!==undefined) doSomething(item[0]); else console.log('no item found'); );当我尝试使用相同的语法来获取上一项时,它会直接跳转到数据库中的第一项。我不知道为什么。以上是关于如何使用 YDN-DB 在 keypath 之后获取下一个元素的主要内容,如果未能解决你的问题,请参考以下文章
使用 YDN-DB 的 IndexedDB:如何在多个过滤器上查询对象存储
使用 YDN-DB 的 IndexedDB:如何确定对象存储是不是存在