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

Posted

技术标签:

【中文标题】如何使用 dexie.js 添加新条目【英文标题】:How do I add a new entry using dexie.js 【发布时间】:2016-01-19 20:54:33 【问题描述】:

使用 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: "test@test.com", 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: "test@test.com", user_group: 2;
db.users.add(insert_data);</code>

有什么想法吗?

【问题讨论】:

尝试使用++id 而不是id++ 这里jsfiddle.net/ks7Laacs/3在运行后检查indexeddb。 【参考方案1】:

id 将被附加检查它。

截图:

Demo

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","susheel61@gmail.com");//default content
document.querySelector("button").addEventListener("click",function(e)
    add_new(document.getElementById("name").value,document.getElementById("email").value);
);

【讨论】:

【参考方案2】:

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

更新小提琴: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:'test@test.com';
  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:'jim@test.com';
    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) 以及更改索引或添加 /removed 表。

【讨论】:

以上是关于如何使用 dexie.js 添加新条目的主要内容,如果未能解决你的问题,请参考以下文章

如何在Safari 10.1.2及更高版本中使用Dexie.js(v 2.0.1)数据库?

在 JavaScript 文件中添加 Dexie.js 查询会提示缺少类型

如何在使用继承的类成员结构中添加新条目

使用 jinja2 时如何将新条目添加到字典对象中?

如何使用 Dbcontext 添加条目

如何删除以编程方式添加新联系人时添加的 Android 联系人应用程序中的重复条目?