如何使用dexie.js 添加新条目

问题描述 投票:0回答:3

使用 Dexie,我尝试添加一个新条目,但只有在指定 ID 号时才能添加它。我希望 id 自动递增作为主键,如何实现这一点?

这有效

var db = new Dexie("user-database");
db.version(1).stores({
    users: "id++"
});
db.open(); 
var insert_data = {id:5,name: "Paul", email: "[email protected]", user_group: 2};
db.users.add(insert_data);

但是如果我从插入对象中取出 id,它就不起作用。见下文

这行不通

var db = new Dexie("user-database");
db.version(1).stores({
    users: "id++"
});
db.open(); 
var insert_data = {name: "Paul", email: "[email protected]", user_group: 2};
db.users.add(insert_data);</code>

有什么想法吗?

javascript angularjs indexeddb dexie
3个回答
2
投票

id
将追加检查。

截图: screenshot of inserted data

演示

html:

Name:<input type="text" name="name" id="name"/><br/>
Email<input type="text" name="email" id="email"/></br>
<button>add new</button>

javascript:

// Declare db instance
var db = new Dexie("test-database");

// Define Database Schema
db.version(1).stores({
    users: "++id, name, email"
});

// Open Database
db.open(); 

function add_new(name,email){
    // Interact With Database
    db.transaction('rw', db.users, function () {
        // Let's add some data to db:
        insert_object = {name:name,email:email};
        db.users.add(insert_object);
    }).catch(function(err) {
        console.error(err.stack || err);
    });    
}

add_new("susheel singh","[email protected]");//default content
document.querySelector("button").addEventListener("click",function(e){
    add_new(document.getElementById("name").value,document.getElementById("email").value);
});

0
投票

David Fahlander 给出的答案其实很有用。 我没有意识到更改架构后应该删除数据库。 所以,这帮助我解决了我的问题。 我本来想将此作为对他的帖子的评论,但我的声誉太低了


-1
投票

在重新定义另一个架构之前,您必须删除数据库。

更新了小提琴:https://jsfiddle.net/dfahlander/eb9yt0s7/

var db = new Dexie("test-database");
db.version(1).stores({
    users: 'id,name,email'
});
document.write ('hello');
db.delete().then(function (){
  return db.open ();
}).then (function (){
  var insert_object = {id:2,name:'Bob',email:'[email protected]'};
  return db.users.add(insert_object);
}).then(function(){
    return db.delete (); // don't forget to delete if changing prim key
}).then (function (){
    db = new Dexie("test-database");
    db.version(1).stores({
        users: 'id++'
    });
    return db.open();
}).then(function (){
    var insert_object = {name:'Jim',email:'[email protected]'};
    db.users.add(insert_object);
}).then(function (){
   return db.users.toArray();
}).then (function (result){
  document.write(JSON.stringify (result));
}).catch (function (e) {
  document.write ('error: ' + e);
});

如果您没有更改主键,而只是添加或删除索引,则可以关闭数据库,然后添加带有更改索引的 db.version (2) 或添加/删除的表。

© www.soinside.com 2019 - 2024. All rights reserved.