資料
問題
- objectStoreを使うにあたって、autoIncrementで一意なidっぽいものをつくりたい
- もちろん、参照できる形で
解決
createObjectStore
メソッドの第二引数に与えるパラメータでObjectStoreのキーが指定できる- 対応しているパラメータのフィールドは以下の2種類
keyPath
:string
- 主キーとして指定するobjectのフィールド. これを指定した場合、このObjectStoreに保存するobjectは、かならずここで指定されたフィールドにプロパティを持たなければならない. 逆に、stringやnumberなどのプリミティブ型を保存したい場合にはこれを指定してはいけない.
autoIncrement
:boolean
- auto incrementなキーを指定するか否か. trueを与えると自動的に主キーが生成され、autoIncremetな挙動をする.
参照: Structuring the database - Web API インターフェイス | MDN
この二つの指定の組み合わせで挙動がそこそこ変わる. 詳しくは↑. で、今回得たいのは、autoIncrementなキーを指定することなので、以下のように指定すればよい
var store = db.createObjectStore('todo', { keyPath: 'my_id', // ここで与えたものを主キーとして... autoIncrement: true // auto incrementalな挙動をする });
このように指定すると、store.put
などのメソッドにmy_id
というフィールドを持たないObjectを渡しても、my_id
というフィールドにautoIncrementな値が自動で生成されて保存される.
サンプルのひな形 をもとに、createObjectStore
メソッドの引数(と、本論ではないがindexedDB.open
の第二引数も都度変える必要がある)を変えてためしてみてください.
DRYな備忘録として