CSV が配列の配列に解析されていると仮定すると、つまり var data = [["timestamp", ["temp1", "temp2", "temp3"], ["timestamp2", ["temp4", "temp5 "、"temp6"]、など..];
次に、列を行名にマップします。
columns = ["timestamp", "temperature"];
次に、それらを使用して簡単な辞書を作成します。
var objectStore = db.transaction("temperatures", "readwrite").objectStore("temperatures");
for (var i = 0; i < data.length; i++) {
var data = {};
var row = data[i];
for (var j = 0; j < row.length; j++) {
data[columns[j]] = row[j];
}
objectStore.put(data, i);
}
このようにして、行にアクセスできますobjectStore.get(rownumber)
しかし、それについてもっと NoSQL にするために、列の 1 つ (「タイムスタンプ」など) をオブジェクトのキーパスにし、multiEntry を使用して温度配列のすべてのサブ値にインデックスを付けます。次のように作成します。
db.createObjectStore("temperatures", {keyPath: "timestamp"});
db.createIndex("temp", "temperature", {"multiEntry": true});
次に、置くときは、キーを使用しないでください。
objectStore.put(data);
次に、それに基づいてものを取得できます。
objectStore.get("2012-04-05");
しかし、本当に素晴らしいのは、過去にさかのぼる気温の逆指数があることです。これにより、「気温が 20 度から 30 度の間のすべての記録を教えてください」のように言うことができます。
objectStore.index("temp").openCursor(IDBKeyRange.bound(20, 30)).onsuccess = function(e) {
var cursor = e.target.result;
if (cursor) {
cursor.continue();
console.log("Found record: ", cursor.value);
}
}
objectstore のキー パスが一意に識別可能な列を指すように注意する必要があります。