function fetchEmployeeByEmail() {
try {
var result = document.getElementById("result");
result.innerHTML = "";
if (localDatabase != null && localDatabase.db != null) {
var range = IDBKeyRange.lowerBound("john");
var store = localDatabase.db.transaction("employees").objectStore("employees");
var index = store.index("emailIndex");
index.get(range).onsuccess = function(evt) {
var employee = evt.target.result;
var jsonStr = JSON.stringify(employee);
result.innerHTML = jsonStr;
};
}
}
catch(e){
console.log(e);
}
}
在上面的示例中,如何获取所有电子邮件的名字" john" ????
答案 0 :(得分:1)
像这样更改过滤器:
if (localDatabase != null && localDatabase.db != null) {
var range = IDBKeyRange.bound("john", "john" + '|', true, true);
codes...
答案 1 :(得分:1)
从关键字到关键字打开索引,最后一个字母改为右边框:
IDBKeyRange.bound(value, increaseLastCharCode(value), false, true);
更改最后一个字符的功能:
function increaseLastCharCode(str){
return str.substring(0, str.length-1) + String.fromCharCode(str.charCodeAt(str.length-1)+1);
}
这将打开从“John”到“Joho”的索引,它不会返回以“Joho”开头的结果
答案 2 :(得分:0)
数据库的nosql方法意味着您应该考虑备用存储访问模式。如果要按名字支持查询,并希望以高性能方式执行此操作,请考虑为每个员工存储派生的名字属性,在此派生属性上创建索引,然后查询索引。
从一个角度来看,存储派生属性是多余的,当然。它也直观地感觉像是规范化违规。然而,这里的想法最终是磁盘空间通常便宜且可用,但时间不是。你可以在时空中做出折衷,做你想做的事。所以你有两种方式: