1.NeDB简介

1.安装

npm install nedb

2.基本使用

2.1.初始化

import Datastore from "nedb";

let config = {
    autoload: true,
};
const nedb = new Datastore({
    ...config,
    filename: "/data/setting.db",
});

2.2.增删改查

数据示例

_idnamegender
id1zhangsanmale
id2lisimale
id3wangwufemale

2.2.1.insert

插入单条

nedb.insert({
    name: "zhangsan"
}, function (err, ret) {
    if (err) {
        reject(err);
    }
    resolve(ret)
});

插入多条

db.insert([{ name: "zhangsan" }, { name: "lisi" }], function (err, ret) {
    if (err) {
        reject(err);
    }
    resolve(ret)
});

2.2.2.remove

删除一条

db.remove({ _id: 'id1' }, {}, function (err, numRemoved) {
    // numRemoved = 1
});

删除多条

db.remove({ gender: 'male' }, { multi: true }, function (err, numRemoved) {
    // numRemoved = 2
});

删除所有

db.remove({}, { multi: true }, function (err, numRemoved) {
});

2.2.3.update

直接替换更新

nedb.update({ name: "zhangsan" }, { name: "lisi" }, {}, function (err, numReplaced) {
    // numReplaced = 1
});

更新现有字段

nedb.update({ gender: 'male' }, { $set: { gender: 'female' } }, { multi: true }, function (err, numReplaced) {
    // numReplaced = 2
});

2.2.4.find

单条件查询

db.find({ name: "zhangsan" }, function (err, ret) {
    if (err) {
        reject(err);
    }
    resolve(ret)
});

多条件查询

db.find({ name: "lisi", gender: "male" }, function (err, ret) {
    if (err) {
        reject(err);
    }
    resolve(ret)
});

查询所有

db.find({}, function (err, ret) {
});

2.我的实践

客户端程序运行在用户终端,会有一些留在本地的配置,考虑使用nedb来进行用户配置存储。为了方便调用,对nedb的方法做了一层封装。

import Datastore from "nedb";

let config = {
    autoload: true,
};
const nedb = new Datastore({
    ...config,
    filename: "/data/setting.db",
});

let db = {
    setting: {
        insert(key, value) {
            return new Promise((resolve, reject) => {
                nedb.insert(
                    { key, value },
                    function (err, ret) {
                        if (err) {
                            reject(err);
                        }
                        resolve(ret);
                    })
            });
        },
        remove(key) {
            nedb.remove(
                { key },
                { multi: true },
                function (err, numRemoved) {
                    if (err) {
                        console.log(err);
                        return;
                    }
                });
        },
        update(key, value) {
            return new Promise((resolve, reject) => {
                nedb.update(
                    { key },
                    { $set: { value } },
                    { multi: true },
                    function (err, numReplaced) {
                        if (err) {
                            reject(err);
                        }
                        resolve(numReplaced);
                    }
                );
            });
        },
        find(key) {
            return new Promise((resolve, reject) => {
                nedb.find(
                    { key },
                    function (err, ret) {
                        if (err) {
                            reject(err);
                        }
                        if (ret.length == 0) {
                            resolve(null);
                        } else {
                            resolve(ret);
                        }
                    }
                )
            });
        }
    }
}

export default db;

学习参考:腾讯全端 AlloyTeam 团队 Blog

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐