wind-core-dao
核心模块:数据访问层及默认lowdb实现
基本用法
npm install @gw/wind-core-dao
async { // 获取数据集合 const testColl = ctx; // 插入数据 const inserted = await testColl; // 根据Id查找 const one = await testColl; // 列表查询 const found = await testColl; }
基本概念
数据访问层定义了2个接口,Collection 和 Database, 二者功能和Mongodb概念类似, 体现的是文档型数据库的相关操作,开发使用接口对数据层进行存取,不必关心具体实现。 具体底层存储可能采取mongodb\pg\sqlite\lowdb等。 本模块内置的是lowdb实现,不需要其他任何服务,数据存储在指定配置的文件夹下。
接口定义
Collection
/** * 文档性数据集合接口 */ /** * 插入文档 * 注意同mongodb相同,采用_id为文档的id, 如果object提供_id则使用,否则会自动创建一个唯一_id * 若插入的数据主键已经存在,则会抛 DuplicateKeyException 异常,提示主键重复,不保存当前数据。 * @abstract * @param object * @return inserted 插入后的对象(含id) */ async {} /** * 更新文档内容。 注意update是整个文档的替换,进行局部替换可使用 $set 关键字 或使用 patch方法 * * @example * 替换一个文档 * await coll.update({ planet: 'Jupiter' }, { planet: 'Pluton'}) * $set 替换字段 * await coll.update({ system: 'solar' }, { $set: { system: 'solar system' } }, { multi: true }) * $unset 删除字段 * await coll.update({ planet: 'Mars' }, { $unset: { planet: true } }) * * @param * @param * @param * @param * @param */ async {} /** * 更新已存在的文档部分内容 * 等同于 * update({ _id: id }, { * $set: object * }); * @abstract * @param id 文档标识 * @param patched 文档要更新的字段集合 */ async {} /** * 删除文档, 删除条件可以为对象(删除满足条件的文档)、字符串(删除指定id的文档)、数组(按多个对象或字符串删除) * @abstract * @example * coll.remove(id) * coll.remove({query: 'abc'}) * coll.remove([id1, id2, id3]) * @param [Array|Object|String] query 查询标识 */ async {} /** * 根据id获取一个文档 * @abstract * @param id */ async {} /** * 判断是否有指定查询条件的文档。具体条件见find参数 * @param query * @return */ async {} /** * 查询满足条件的文档列表 * @abstract * @example * 基础条件查询、计数 * await coll.find({ system: 'solar' }); * 正则匹配 包含 /ar/ * await coll.find({ planet: /ar/ }); * 多条件查询 Finding all inhabited planets in the solar system * await coll.find({ system: 'solar', inhabited: true }) * 对象类型字段的递归查询 * await coll.find({ "humans.genders": 2 }) * 支持的数组查询方式 按数组字段查询 * await coll.find({ "completeData.planets.name": "Mars" }) * await coll.find({ "completeData.planets.name": "Jupiter" }) * 支持的数组查询方式 按下标查询 * await coll.find({ "completeData.planets.0.name": "Earth" }) * 操作符 $in. $nin * await coll.find({ planet: { $in: ['Earth', 'Jupiter'] } }) * 按id的多个查找 * await coll.find({ _id: { $in: ['id1', 'id2', 'id3'] } }) * 数字比较 $gt $lt * await coll.find({ "humans.genders": { $gt: 5 } } * * 查询 按名称排序 const result = await coll.find({}, { sort: { planet: 1 }, skip:1, limit: 2 }); * 查询投影 await coll.find({ planet: 'Mars' }, { projection: { planet: 1, system: 1 } }); * @param * @param * @param * @param * @param * @return */ async {} /** * 按条件查询文档个数 * @example * const count = await coll.count({}); // 3 * @param */ async {} /** * 清空数据库 * @abstract * @return */ async {} /** * 字段distinct * @param * @param */ async {}
/** * 获取集合 * @param name */ async {} /** * 删除数据集合 * @param name */ async {} /** * 创建数据集合 */ async {}
配置及对象获取
默认lowdb配置参数
启动参数
获取数据库对象
appdb // 获取默认数据库 (保存到db.json) app //获取指定数据库 (保存到name.json)
获取Coll对象
db
注意
- 默认的lowdb只用于少量数据使用 建议<1000
- lowdb query 暂时不支持sort projection功能