数据库(db)

传统的B/S结构的程序中,除了前端的开发之外,可能还需要有一台服务器、一门后端语言和一个数据库来处理和存储用户数据,这会带来很大的维护成本和可用性的问题。

uTools的很多插件就像是一个微型的应用程序,总是会碰到一些数据需要持久化存储的场景,为了解决这个问题,我们整合并提供了一个nosql数据库系统,它可以很方便的使用,并在多个设备之间实现秒级同步。

utools.db.put(Object)

执行该方法将会创建或更新数据库文档

// 创建请求
  utools.db.put({
    _id: "demo",
    data: "demo"
  })
  // 返回
  {id: "demo", ok: true, rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"}
  
  
  // 更新请求
  utools.db.put({
    _id: "demo",
    data: "demo",
    _rev: "1-05c9b92e6f24287dc1f4ec79d9a34fa8"
  })
  

_id代表这个文档在数据库中唯一值,如果值不存在,则会创建一个新的文档,如果值已经存在,则会进行更新。你可能已经注意到,返回对象中包含一个rev属性,这是代表此文档的版本,每次对文档进行更新时,都要带上最新的版本号,否则更新将失败。

另外需要注意,每次更新时都要传入完整的文档数据,无法对单个字段进行更新。

utools.db.get(string)

执行该方法将会根据文档ID获取数据

// 请求
  utools.db.get("demo")
  // 返回
  {_id: "demo", _rev: "3-9836c5c68af5aef618e17d615882942a", data: "demo"}
  

utools.db.remove(string | Object)

执行该方法将会删除数据库文档,可以传入文档对象或文档id进行操作。

// 请求
  utools.db.remove("demo")
  // 返回
  {id: "demo", ok: true, rev: "2-effe5dbc23dffc180d8411b23f3108fb"}
  

utools.db.bulkDocs(Array)

执行该方法将会批量更新数据库文档,传入需要更改的文档对象合并成数组进行批量更新。

// 请求
  utools.db.bulkDocs([{
    _id: "demo1",
    data: "demo",
    _rev: "1-c8817a74e292eda4cba1a45924853af6"
  }, {
    _id: "demo2",
    data: "demo",
    _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7"
  }])
  // 返回
  [{
    id: "demo1", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
  }, {
    id: "demo2", ok: true, rev: "2-7857b2801bc0303d2cc0bb82e8afd796"
  }]
  

utools.db.allDocs(String|Array)

执行该方法将会获取所有数据库文档,如果传入字符串,则会返回以字符串开头的文档,也可以传入指定ID的数组,不传入则为获取所有文档。

// 根据preKey请求
  utools.db.allDocs("demo")
  // 返回
  [{
    _id: "demo/123", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
  }, {
    _id: "demo/124", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
  }, {
    _id: "demo/125", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
  }]
  // 根据id数组请求
  utools.db.allDocs([
    "demo1",
    "demo2"
  ])
  // 返回
  [{
    _id: "demo1", _rev: "2-7857b2801bc0303d2cc0bb82e8afd796", data: "demo"
  }, {
    _id: "demo2", _rev: "1-f0399b42cc6123a9cc8503632ba7b3a7", data: "demo"
  }]