NoSQL 嵌入式数据库NeDB示例

由 夕空 撰写于  2020年7月2日

在nw.js一直无法配置sqlite3数据库,所以一直使用web sql数据库,不过还原之类的操作异常麻烦,打算使用NeDB数据库,非关系型数据库的扩展性很适合数据结构不确定性的nw.js项目。

参考:http://www.alloyteam.com/2016/03/node-embedded-database-nedb/

https://www.w3cschool.cn/nedbintro/nedbintro-eqsm27mb.html

在Capacitor或cordova打包APP使用需引用:

npm i cordova-plugin-file (操作系统文件权限)

var db = new Nedb({ }); (注意区分大小写)

<!DOCTYPE html>
<html lang="zh-cn">

<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>NoSQL 嵌入式数据库 NeDB</title>
</head>

<body>
<button id="add" onclick="add()">新增</button>
<button id="add" onclick="add2()">新增2</button>
<button id="add" onclick="edit()">修改</button>
<button id="add" onclick="del()">删除</button>
<button id="list" onclick="datafile()">压缩数据</button>
<button id="list" onclick="list()">log</button>
<script>
var NeDB = require('nedb')
var db = new NeDB({
filename: 'flashme-data.nedb',
autoload: true,//加载至内存
timestampData: true,//自动时间戳
})


var doc = {
hello: 'flashme'
, n: 5
, today: new Date()
, nedbIsAwesome: true
, notthere: null
, content: 'hi\n<span>"中文"</span>'
, fruits: ['apple', 'orange', 'pear']
, infos: { name: 'nedb' }
};

function add() {
db.insert(doc, function (err, newDoc) {
console.log(err, newDoc);
});
}
function add2() {
db.insert([{ a: 5, hello: "修改" }, { a: 42 }], function (err, newDocs) {
});
}

// 示例2: {field: {$op: value}} ($op代表任意比较运算符)
// $lt, $lte: 小于,小于等于
// $gt, $gte: 大于,大于等于
// $in: 属于
// $ne, $nin: 不等于,不属于
// $exists: 取值为true或者false,用于检测文档是否具有某一字段
// $regex: 检测字符串是否与正则表达式相匹配

// $lt, $lte, $gt and $gte 只能用于数字和字符串类型
function list() {
//包含查询
db.find({ hello: { $exists: 'flash' } }, function (err, docs) {
console.log(docs);

});

//分页
db.find({}).sort({ _id: 1 }).skip(1).limit(5).exec(function (err, docs) {
console.log("分页:", docs)
});

// 反向排序
db.find({}).sort({ _id: -1 }).skip(1).limit(5).exec(function (err, docs) {
console.log("倒序:", docs)
});
}

//可用的修饰符有$set(改变字段值), $unset(删除某一字段), $inc(增加某一字段), $min/$max(改变字段值,传入值需要小于/大于当前值),
//还有一些用在数组上的修饰符,$push, $pop, $addTopSet, $pull, $each, $slice
function edit() {
db.update({ hello: '修改' }, { $set: { n: 999 } }, { multi: true }, function (err, numReplaced) {
console.log("edit -> numReplaced", numReplaced)
// db.persistence.compactDatafile();//压缩数据
});
}

function del() {
// 删除多条记录
db.remove({ a: 42 }, { multi: true }, function (err, numRemoved) {
console.log("del -> numRemoved", numRemoved)

});
}

//增删改操作都是在数据尾部形成记录,执行数据压缩才会将数据文件里转为最终态
function datafile() {
db.persistence.compactDatafile();//压缩数据
}
</script>
</body>

</html>



声明:星耀夕空|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - NoSQL 嵌入式数据库NeDB示例


欢迎光顾我的小站!