我理解indexedDB没有findOne或者找不到函数(就像MongoDB那样),但我想要完成的就是那些函数。
我在indexedDB中有一个数据存储。我使用比较cmdline
。
我想在商店中找到stop_id
的所有文件。多个对象可能有一个stop_id
值。
我有什么:
我想欺骗一下(如果有更好的方法,请纠正我)
stop_id
然后我想用html调用:
// this function is called from html via angularjs
$scope.findOne = function(stop_id) {
var db;
var request = indexedDB.open("Trans");
request.onerror = function(event) {
alert("Couldn't connect to Database");
};
request.onsuccess = function(event) {
db = event.target.result;
var objectStore = db.transaction("times").objectStore("times");
var index = objectStore.index("stop_id");
var range = IDBKeyRange.only(stop_id);
// call something here to retrieve
// One or All documents with the ID of stop_id
// passed in from the html
}
}
我正在考虑上述方法,因为indexedDB本身不支持连接,我将希望使用本机indexeddb变通方法来实现在另一个数据存储中动态检索与id相关的额外数据。性能不是问题。两个数据存储文档都不会超过150个项目。
答案 0 :(得分:0)
使用IDBIndex get或openCursor方法。
// for one
var range = IDBKeyRange.only(myId);
var getRequest = index.get(range);
getRequest.onsuccess = function(event) {
var result = event.target.result;
console.log(result);
};
// for multiple ...
var getRequest = index.openCursor(range);
var documentsFound = [];
getRequest.onsuccess = function(event) {
var request = event.target;
var cursor = request.result;
if(!cursor) {
console.log('no match found, or no more matches found');
someFunction(documentsFound);
} else {
console.log('Found:', cursor.value);
documentsFound.push(cursor.value);
cursor.advance();
}
};
如果商店中的多个对象可以具有相同的stop_id
,那么请确保在onupgradeneeded处理程序中创建索引时不使用unique:true
标志。