我如何为indexedDB构建这样的查询:
SELECT GROUP_CONCAT(id) as ids FROM contacts GROUP BY name HAVING count(name) > 1
Run Code Online (Sandbox Code Playgroud)
我的目标是显示重复的项目.
您必须手动迭代,但使用索引按名称迭代:
在"upgradeneeded"处理程序中:
// Assumes records like {id: 1234, name: 'Beyoncé'}
var store = db.createObjectStore('contacts', {keyPath: 'id'});
var index = store.createIndex('by_name', 'name');
Run Code Online (Sandbox Code Playgroud)
要查询:
// Results end up here - this is map from name to array-of-ids:
var dupes = new Map();
var tx = db.transaction('contacts');
var index = tx.objectStore('contacts').index('by_name');
var req = index.openCursor();
var last;
req.onsuccess = function() {
var cursor = req.result;
if (!cursor) return; // Done!
var name = cursor.key, id = cursor.primaryKey;
if (name === last) {
// It's a duplicate!
if (!dupes.has(name)) dupes.set(name, []);
dupes.get(name).push(id);
} else {
last = name;
}
cursor.continue();
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
635 次 |
| 最近记录: |